C++ cli 将PInvoke调用转换为C++/CLI 我的C++ DLL有以下功能: void allocate(double *&arr_not_allocated, UINT &arrayCount); 通常,我从C++中传递到C++: 我只是想知道,用C++ + CLI代替C++ C是什么等价调用C++?p>
我还应该注意,我不希望将分配的数组保存在托管内存中(仅在非托管内存中),因此我不想封送托管端的任何结构。 我只想从C++中获取本地指针,并可能将来将非托管数组的地址传递回C++。这就是为什么我过去在P/Invoke中使用IntPtrC++ cli 将PInvoke调用转换为C++/CLI 我的C++ DLL有以下功能: void allocate(double *&arr_not_allocated, UINT &arrayCount); 通常,我从C++中传递到C++: 我只是想知道,用C++ + CLI代替C++ C是什么等价调用C++?p>,c++-cli,pinvoke,C++ Cli,Pinvoke,我还应该注意,我不希望将分配的数组保存在托管内存中(仅在非托管内存中),因此我不想封送托管端的任何结构。 我只想从C++中获取本地指针,并可能将来将非托管数组的地址传递回C++。这就是为什么我过去在P/Invoke中使用IntPtr 谢谢
谢谢在C++中,通过引用在调用方网站上是完全透明的。它不区分用于输入、输出或两者的按引用参数。但它也不允许在函数调用中声明变量,所以必须事先声明这些变量。最终的代码非常简单:
double* arr_not_allocated;
UINT arrayCount = whatever;
allocate(arr_not_allocated, arrayCount);
/* now both arrayCount and arr_not_allocated have been updated by the function */
如果没有导入库,则可能必须使用LoadLibrary()
并将结果句柄传递给GetProcAddress
。GetProcAddress
的结果转换为正确的函数指针类型,即typedef void(*allocate_fnptr)(double*&,UINT&)代码>
我没有包括呼叫约定,因为您的问题没有指定。但您可能需要在函数指针类型中插入\uuu cdecl
或\uu stdcall
。我不确定是否理解您的问题;C++ C++ CLI C++基本上是具有附加功能的C++,所以你可以用C++调用DLL,就像普通C++代码中调用它一样。我只是换了一个以前从C#打的电话。好吧,我现在明白你的意思了。抱歉,我对C++/CLI完全陌生。谢谢你的评论。这对我来说真的很清楚。非常感谢。我不知道语言可以使用与C++相同的语法,因为我一直在查看我所看到的许多代码中的托管指针。我想我的问题真的很愚蠢。我猜只要我只在非托管端进行分配,并且不将分配的数组封送回来,我就不需要固定指针或任何东西?在这种情况下,我只需从返回到C++ /CLI的指针中创建一个ItPtR,并将其返回到C,以在将来需要将其传递回C++时。谢谢
double* arr_not_allocated;
UINT arrayCount = whatever;
allocate(arr_not_allocated, arrayCount);
/* now both arrayCount and arr_not_allocated have been updated by the function */