请问:C#中怎么调用C语言编写的形参是二级指针的函数
请教: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/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/C++ code
void fun1(TStudent **pp) { (*p) = malloc(sizeof(TStudent)); ... }