C#中调用dll,函数参数带指针,如何改写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中调用dll,函数参数带指针,如何改写?相关的知识,希望对你有一定的参考价值。

原动态链接库UA300.DLL中的函数原型为:
void_stdcall readdata(HANDLE husb, short* addat, unsigned short fcode, long leng)
在C#中调用,如下改写是否正确?
[DllImport("UA300.DLL", CharSet = CharSet.Unicode, EntryPoint = "readdata",SetLastError=true,ExactSpelling=true,CallingConvention=CallingConvention.StdCall,PreserveSig=true)]

unsafe public static extern void readdata(IntPtr husb,
short* addat, ushort fcode, Int32 leng);

unsafe public short[] data = new short[4096];
unsafe private void button1_Click(object sender, EventArgs e)


fixed (short* k = data)

readdata(husb, k , 3000, 256);

试了,还是不行,到底应该怎么写啊??急求解决方法!非常感谢大家帮忙
能就我提问的函数给具体改写一下吗?我是个初学者

试一下:

把“short*”改为“ref short”
[DllImport("UA300.DLL", CharSet = CharSet.Unicode, EntryPoint = "readdata",SetLastError=true,ExactSpelling=true,CallingConvention=CallingConvention.StdCall,PreserveSig=true)]

unsafe public static extern void readdata(IntPtr husb,
ref short addat, ushort fcode, Int32 leng);

调用时也加上ref:
readdata(husb, ref k , 3000, 256);
参考技术A 不知道你能不能看到我空间的日志...
http://user.qzone.qq.com/37208828?ptlang=2052
《与非托管Dll的交互》

网上很多方法都不行 研究的三天才知道的

以上是关于C#中调用dll,函数参数带指针,如何改写?的主要内容,如果未能解决你的问题,请参考以下文章

C#调用带参动态库时一直报错?

C#调用DLL,参数是指针,怎么做?

c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法

C#调用DLL,参数是指针,怎么做?

当参数之一是指针数组时,如何从 C# 调用 C++ DLL

如何从 C# 调用具有 void* 回调和对象参数的 C++ Dll 中的函数