Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net P/调用纯C++;图书馆?_.net_C++_Pinvoke - Fatal编程技术网

.net P/调用纯C++;图书馆?

.net P/调用纯C++;图书馆?,.net,c++,pinvoke,.net,C++,Pinvoke,是否可以调用一个纯C++库,或者必须在C?< /p> 中封装一个“纯”C++库,它的名称会被编译器所损坏,所以很难得到p/Unjk声明正确。 C方法在开始时得到下划线,这在C++中可能不存在。 C++方法需要这个实例作为第一个参数,你必须自己给出。p> 我认为你需要用C兼容的方法包你的C++ API。< P> C++库可以被调用,但是你需要使用“依赖”来查找被损坏的方法名称(比如@ 0)。classname@classname@例如,方法使用“ThisCall”调用p/joCK中的约定,并将实例

是否可以调用一个纯C++库,或者必须在C?< /p> 中封装一个“纯”C++库,它的名称会被编译器所损坏,所以很难得到p/Unjk声明正确。 C方法在开始时得到下划线,这在C++中可能不存在。 C++方法需要这个实例作为第一个参数,你必须自己给出。p>

我认为你需要用C兼容的方法包你的C++ API。

< P> C++库可以被调用,但是你需要使用“依赖”来查找被损坏的方法名称(比如@ 0)。classname@classname@例如,方法使用“ThisCall”调用p/joCK中的约定,并将实例引用作为第一个参数(可以将构造函数的结果存储在一个ItPTR中)。

只有一个对象的实例方法采用隐式<代码> > 。当然,我不能想象C++库只使用静态方法。C++也允许非成员方法,你知道。@jalf,是的,我同意你,也同意280Z28。但是,我很抱歉,坚持,你能想象写一个C++库,只使用非成员方法吗?是的。我可以想象一个C++库,它内部使用成员方法,但是其公共接口都是非成员函数。不过,我同意你的观点:典型的C++库确实公开了成员方法是它们的接口的一部分。另一种选择是C++ + CLI.This是可怕的建议。即使在技术上是可能的,你也会遇到很多问题,试图将它调用到C++类中。例如,构造函数和析构函数将不能正确调用,.NET内存处理与C++ <代码>新< /COD>和<代码>删除>代码>不兼容。C++/CLI是一个更好的主意。问题是如何使用PInvoke,我回答了这个问题。创建/删除问题可以通过找到C++的静态创建和删除方法来轻松地克服,并从包装C类中调用它们。@ DANYVALOD,您的答案确实是正确的。C++类方法(非纯虚方法、非静态方法)调用和C风格调用之间的主要区别是您刚才提到的1。破损的名字,2。“ThisCall”的调用约定3。将实例的引用作为第一个参数传递。我已经写了一个自动化的工具。请看这篇代码项目文章: