C#调用DLL,参数是指针,怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#调用DLL,参数是指针,怎么做?相关的知识,希望对你有一定的参考价值。
B1.3 “卡上电”或“热复位“函数 函数: long ICC_Reader_PowerOn(long ReaderHandle, unsigned char ICC_Slot_No, unsigned char* Response) 功能: 该函数要求读卡器对ICC进行冷复位,若冷复位失败读卡器应启动一个热复位。 参数说明: ReaderHandle:设备句柄; ICC_Slot_No:ICC连接器号;用户卡连接器号 0x0n,SAM卡连接器号0x1n,其中”n”的取值范围为1~F。 Response:指向存放响应数据的存储区的指针 返回值: 如果对ICC复位成功,则在Response的存储区中返回ICC的复位应答字节,返回值为存储区中的字节数;返回值小于0为状态码,其含义见B1.8。 这个是读卡器接口的说明文档 我在C#这里这样调用 [DllImport("SSSE32.dll")] private static extern int ICC_Reader_PowerOn(int ReaderHandle, string ICC_Slot_No,????); 问号处不知道怎么写,C#是不能用指针的,请高手帮忙看看怎么写
参考技术A [DllImport(@"xxx.dll",EntryPoint
=
"KMeans",
CharSet
=
CharSet.Auto)]
public
static
extern
void
KMeans(
[MarshalAs(UnmanagedType.LPArray,
SizeParamIndex
=
3)]
double[]
rawdata,
//KMeans
原始数据
int
rows,
//数据点个数
int
K,
//
聚类
个数
int
size);
//表示第一个
参数
的
长度
上面是从我自己的一段正确可执行的
代码
中取出来的一段代码(我的代码是通过C#调用C++写的一个算法程序)。‘KMeans原始数据’对应的C++
函数
参数就是一个
指针
。
在C#中通过PInvoke技术调用
C/C++
的代码的时候,在C#这边是使用
数组
类型来实现。并且要加上[MarshalAs(UnmanagedType.LPArray,
SizeParamIndex
=
3)],SizeParamIndex参数是指定这个数组(在C#中)或指针对应的存储空间(在C/C++中)的长度。
以上是关于C#调用DLL,参数是指针,怎么做?的主要内容,如果未能解决你的问题,请参考以下文章
c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法