读书人

求教C++ 含指针DLL在.net中的引用即调

发布时间: 2012-03-18 13:55:38 作者: rapoo

求教C++ 含指针DLL在.net中的引用即调用方式
原型 : int bst_transmit(void* pBuffer,int nLength,int DeviceId,int ChannelId)

功能 : 发送卡发送数据.可以反复多次调用,建议nLength取值在20K到2M之间

参数 : pBuffer待发送数据缓冲区的指针;
nLength要发送的长度,字节单位,建议取值在20480到204800之间.
DeviceId发送卡编号,0开始.
ChannelId通道编号,从0开始

返回值: 实际发送的数据长度,字节单位
负数表示操作出错

[解决办法]
C++ void* pBuffer
=>
C# byte[] pBuffer
[解决办法]
public extern int bst_transmit(IntPtr pBuffer,int nLength,int DeviceId,int ChannelId)
[解决办法]

探讨

C++转C#
pParam->file_buffer=new unsigned char[ts_size];

pParam.file_buffer=new byte[ts_size];
对吗?

[解决办法]
2, 3的方法都可行,若仍有,
[DllImport("bst_2k.dll", EntryPoint = "bst_transmit", CharSet=CharSet.Auto, CallingConvention=CallingConvention.Cdecl)]
//Cdecl(呼叫端) or StdCall(被呼叫端)表看你要在那放料
public static extern int bst_transmit(IntPtr pBuffer, int nLength, int DeviceId, int ChannelId);
你宣告完後,正用bst_transmit(pBuffer, nLength, DeviceId)你的bst_transmit就已被值了。
[解决办法]
可以先把化,
string str = "hello" ;
IntPtr pBuffer = System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(str);
res = bst_transmit(pBuffer, str.Length, 0, 0);
看看可以成功?
如果也不行,可能要想想bst_transmit有?
[解决办法]
IntPtr FilePort = (IntPtr)File_Sm.Read(Buff, TS_BUFFER_LENGTH*i, TS_BUFFER_LENGTH);
File_Sm.Read(....)型是int, 不型可以
int FilePort=File_Sm.Read(Buff, TS_BUFFER_LENGTH*i, TS_BUFFER_LENGTH);

如果不行,一定要的,
bst_transmit(Covenrt.ToInt32(FilePort), str.Length, 0, 0);

读书人网 >C#

热点推荐