<i id='tYy8L'><tr id='tYy8L'><dt id='tYy8L'><q id='tYy8L'><span id='tYy8L'><b id='tYy8L'><form id='tYy8L'><ins id='tYy8L'></ins><ul id='tYy8L'></ul><sub id='tYy8L'></sub></form><legend id='tYy8L'></legend><bdo id='tYy8L'><pre id='tYy8L'><center id='tYy8L'></center></pre></bdo></b><th id='tYy8L'></th></span></q></dt></tr></i><div id='tYy8L'><tfoot id='tYy8L'></tfoot><dl id='tYy8L'><fieldset id='tYy8L'></fieldset></dl></div>
          <bdo id='tYy8L'></bdo><ul id='tYy8L'></ul>
        <legend id='tYy8L'><style id='tYy8L'><dir id='tYy8L'><q id='tYy8L'></q></dir></style></legend>
      1. <tfoot id='tYy8L'></tfoot>
      2. <small id='tYy8L'></small><noframes id='tYy8L'>

        如何在ctypes中传回指针?

        时间:2023-08-06
      3. <small id='jvVce'></small><noframes id='jvVce'>

          <tbody id='jvVce'></tbody>

          <i id='jvVce'><tr id='jvVce'><dt id='jvVce'><q id='jvVce'><span id='jvVce'><b id='jvVce'><form id='jvVce'><ins id='jvVce'></ins><ul id='jvVce'></ul><sub id='jvVce'></sub></form><legend id='jvVce'></legend><bdo id='jvVce'><pre id='jvVce'><center id='jvVce'></center></pre></bdo></b><th id='jvVce'></th></span></q></dt></tr></i><div id='jvVce'><tfoot id='jvVce'></tfoot><dl id='jvVce'><fieldset id='jvVce'></fieldset></dl></div>

                <bdo id='jvVce'></bdo><ul id='jvVce'></ul>

                <legend id='jvVce'><style id='jvVce'><dir id='jvVce'><q id='jvVce'></q></dir></style></legend>
              • <tfoot id='jvVce'></tfoot>
                • 本文介绍了如何在ctypes中传回指针?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  对ctypes了解不多,最近才开始接触.

                  Don't know much about ctypes, just recently began working with it.

                  我在类 C 的 dll 中有一个简单的函数,它返回指向动态生成的字符串的指针.
                  它工作正常,但是因为我为字符串手动分配了内存,所以我应该在使用后释放它.

                  I have a simple function in C-like dll which returns a pointer to the dynamically generated string.
                  It is working fine, but, because i manually allocated memory for the string, i should free it after use.

                  我有这样的事情:

                  extern "C" char* DLL_EXPORT func(const char* str1, const char* str2)
                  {
                      return getSomeString(str1, str2);
                  }
                  
                  // Goal is to call this function correctly from Python.    
                  extern "C" void DLL_EXPORT freeMem(void *mem)
                      {
                          if(mem!=NULL)
                              delete mem;
                      }
                  

                  但我不知道,如何将接收到的指针传回以在 Python 中删除?

                  But i don't have any idea, how can i pass received pointer back for deletion in Python?

                  推荐答案

                  你在正确的轨道上.

                  // TestDLL.cpp
                  #include <string.h> // strcpy
                  
                  extern "C" __declspec(dllexport) char* stringdup(const char* str) {
                      char* p = new char[strlen(str)+1];
                      strcpy(p,str);
                      return p;
                  }
                  
                  // if you have no good reason to use void*, use the type
                  // you've allocated. while it usually works for built-in
                  // types, it wouldn't work for classes (it wouldn't call
                  // the destructor)
                  extern "C" __declspec(dllexport) void stringfree(char* ptr) {
                      // you don't need to check for 0 before you delete it,
                      // but if you allocate with new[], free with delete[] !
                      delete [] ptr; 
                  }
                  

                  在python中:

                  # Test.py
                  import ctypes
                  
                  lib = ctypes.cdll.TestDLL
                  
                  # this creates a c-style char pointer, initialized with a string whose
                  # memory is managed by PYTHON! do not attempt to free it through the DLL!
                  cstr = ctypes.c_char_p("hello ctypes")
                  
                  # call the dll function that returns a char pointer 
                  # whose memory is managed by the DLL.
                  p = lib.stringdup(cstr)
                  
                  # p is just an integer containing the memory address of the 
                  # char array. therefore, this just prints the address:
                  print p
                  
                  # this prints the actual string
                  print ctypes.c_char_p(p).value
                  
                  # free the memory through the DLL
                  lib.stringfree(p)
                  

                  这篇关于如何在ctypes中传回指针?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:struct.error:结构格式中的错误字符 下一篇:在 Python 的控制台中显示 Emoji

                  相关文章

                  最新文章

                  <small id='wO2io'></small><noframes id='wO2io'>

                  <tfoot id='wO2io'></tfoot>

                      <bdo id='wO2io'></bdo><ul id='wO2io'></ul>
                  1. <legend id='wO2io'><style id='wO2io'><dir id='wO2io'><q id='wO2io'></q></dir></style></legend>
                    1. <i id='wO2io'><tr id='wO2io'><dt id='wO2io'><q id='wO2io'><span id='wO2io'><b id='wO2io'><form id='wO2io'><ins id='wO2io'></ins><ul id='wO2io'></ul><sub id='wO2io'></sub></form><legend id='wO2io'></legend><bdo id='wO2io'><pre id='wO2io'><center id='wO2io'></center></pre></bdo></b><th id='wO2io'></th></span></q></dt></tr></i><div id='wO2io'><tfoot id='wO2io'></tfoot><dl id='wO2io'><fieldset id='wO2io'></fieldset></dl></div>