-1
我想从C#程序中编译的C/C++ dll调用一些函数。我已经成功地调用了几个函数,但是在一对夫妇中遇到了麻烦。从C调用C/C++ dll函数#
Compliled C/C++函数调用:
DECLDIR int ADS1292R_Get_Version(unsigned char ADS129x_Version[])
{
unsigned char Wbuf[10];
unsigned char Rbuf[10], RetVal =1;
Wbuf[0] = START_DATA_HEADER; // PACKET Start header
Wbuf[1] = FIRMWARE_VERSION_REQ; // Get firmware version info command
Wbuf[2] = 0x00; // Not used
Wbuf[3] = 0x00; // Not used
Wbuf[4] = 0x00; // Not used
Wbuf[5] = END_DATA_HEADER; // Packet End header
Wbuf[6] = '\n';
pComPort->Write(Wbuf, 7); // Send command to firmware
Sleep(5);
memset(Rbuf,0,7);
pComPort->Read(Rbuf, 7); // Receive response from Frimwate
if ((Rbuf[0] == START_DATA_HEADER)
&& (Rbuf[1] == FIRMWARE_VERSION_PACKET)
&& (Rbuf[5] == END_DATA_HEADER))
{
ADS129x_Version[0]= Rbuf[2]; // Get Major Number
ADS129x_Version[1]= Rbuf[3]; // Get Minor number
RetVal = 0; // Set return val as su
}
return RetVal;
}
C#实现(与用于类的包装功能一起):
[DllImport("ADS1292R_USB_lib.dll", EntryPoint = "ADS1292R_Get_Version")]
public static extern int ADS1292R_Get_Version(byte[] x);
public int getVersion()
{
byte[] dataTemp = new byte[3];
int mydata = ADS1292R_Get_Version(dataTemp);
if (mydata == 0)
{
MessageBox.Show("1:" + dataTemp[0].ToString()
+ " 2:" + dataTemp[1].ToString()
+ " 3:" + dataTemp[2].ToString());
}
return 0;
}
在运行时,下面的错误正在引发。 有什么,我失踪?
更新了错误的文字:
“PInvokeStackImbalance检测” “A调用的PInvoke功能有不平衡堆栈这可能是因为托管的PInvoke签名不‘DLLTalk DLLTalk.DLLClass :: ADS1292R_Get_Version!’。匹配非托管目标签名,检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。“
您是否收到错误消息?它是什么? –
另请注意,您不需要C++通过[串口]进行通信(http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx) – Lol4t0
您提出了一个问题.........但是参考什么?你没有提到你遇到的任何问题/错误。 – tnw