<p>序言:如果这是一个没有答案的道歉;我希望能够回到这个问题,并找到链接,评论往往腐烂。。。在</p>
<p>首先,gcc(在版本匹配Gnat中)可以作为一个替代的C编译器工作,如果是这样,它可以消除与不兼容的库版本的困难。在</p>
<p>GCC可用于生成Windows dll,因此结果应该可以从其他Windows可执行文件使用。在</p>
<p>下面的注释;gcc看起来确实允许编译,但结果目前无法从Python中使用-在这里,我对Python的了解很浅,而且我们没有MCVE,因此这是推测性的:</p>
<p><a href="https://stackoverflow.com/questions/11584765/integrating-c-and-python-valueerror-module-functions-cannot-set-meth-class-or">This Q&A addresses the same error message</a>在Python和纯C之间,没有Ada,这表明这个错误可能不是C包装的Ada特有的。在</p>
<p>你已经绕过了提问者的具体错误</p>
<pre><code>static PyMethodDef* _npfindmethods = { ... };
</code></pre>
<p>它使用了一个指针;您正在(根据答案正确地)静态分配一个数组。但是,接受的答案会终止方法列表</p>
^{pr2}$
<p>使用NULL方法;您的示例不会:</p>
<pre><code>static PyMethodDef LIB_METHODS_methods[] = {
{ "CPP_DIVISION", _wrap_DIVISION, METH_VARARGS }
};
</code></pre>
<p>所以我的假设是,当你在这个模块上运行<code>setup()</code>时,它会成功地找到CPP_除法,然后在没有空方法的情况下,它会陷入混乱,产生相同的症状,尽管原因不同。在</p>
<p>我可以用MCVE来测试这个假设,方法是删除NULL方法;但是我手头没有Windows系统,只有Linux。在</p>
<p>或者,我认为没有理由使用C层。如果没有C层,<a href="https://stackoverflow.com/questions/13271818/preventing-mangled-names-in-ada-dll?rq=1">this Q&A addresses direct interaction between Python and Ada</a>没有C层,尽管它似乎使用了不同的方法,<code>getattr()</code>来导入外部方法。可能是另一种选择?在</p>