请教:C#中如何调用C语言编写的形参是二级指针的函数?
大家好,我是写C/C++的,对于C#不是太了解,由于项目急,只看了一天C#方面的资料就开始用C#编程的,现想请教一下大家一个C#方面的问题,谢谢大家的解答。
情况是这样的,我写了一个C的dll动态库,名叫DllRFID.dll,库中封装了一个函数:int API_ISO180006C_CustomCmd(IN HANDLE hSerialComm, IN ISO180006CCMDTYPE cmdType, IN UISO180006CCMDPARAM *puCmdParam,
OUT SISO180006CCUSTOMCMDRESULT **ppCustomCmdResult);
那我在C#中要如何编写,是不是要写成这样?
[DllImport("DllRFID.dll", EntryPoint = "API_ISO180006C_CustomCmd", SetLastError = true)]
public static extern Int32 API_ISO180006C_CustomCmd(IntPtr hSerialComm, Byte cmdType, /* UISO180006CCMDPARAM *puCmdParam */ IntPtr puCmdParam, /*OUT SISO180006CCUSTOMCMDRESULT **ppCustomCmdResult*/ IntPtr ppCustomCmdResult);
还有,调用的代码是怎么写啊?这两天我上网搜到了一些资料,但都没有说到C的二级指针在C#中要怎么写,具体用的时候要怎么调用,哪位高人可以给出一段代码吗?非常感谢!
------解决方案-------------------- 不是所有类型都可以跨语言调用的。
------解决方案-------------------- 不需要使用指针。在C#中定义好兼容的结构体,用Marshal分配空间,再传递给dll。
------解决方案-------------------- C#的指针自己去MSDN找指针的说明。
------解决方案-------------------- 别指望在C#里使用指针了,哪怕是所谓的unsafe状态下指针也是限制极多。
------解决方案-------------------- 在C#里不叫指针,而叫引用
用unsafe是可以显示调用指针的,但不建议这么做
------解决方案-------------------- 所谓“二级指针”其实就相当于二维数组。
------解决方案-------------------- 探讨 所谓“二级指针”其实就相当于二维数组。
------解决方案-------------------- 既然熟悉C++,先了解一下PInvoke的基本知识,再用C#写PInvoke调用
C# code
TStudent p = null;
fun1(out p);
------解决方案-------------------- 探讨 个人建议是加一层C++/CLI的封装,方便快捷.
------解决方案-------------------- 探讨 引用: 个人建议是加一层C++/CLI的封装,方便快捷. 学习难度C++/CLI>C++>C#,最重要的是,C++/CLI编程没有智能语法提示,编译器(最新的11除外)不支持C++/CLI的语法检测。因此用C++/CLI封装还不如用C#直接调用,封装难度比直接调用更大。
------解决方案-------------------- C/C++ code
void fun1(TStudent **pp)
{
(*p) = malloc(sizeof(TStudent));
...
}