淘-
2015-10-26 04:32c#调用C++的DLL时调用失败
1本人C#小白。老大要求用C#调用C++的DLL.
C++的我写出来了,可以调用成功.
#include
#include
void main(){
HMODULE hModule = ::LoadLibrary(_T("C:\CT_InfoTerm.dll"));
typedef LONG (WINAPI pDLLProc)(int,char,int,int,int,char*,int);
pDLLProc dllfunc;
int iPort = 0;
char cExtendPort[1] = {'9'};
int iBaudRate = 9600;
int iVoiceType = 0;
int iTimeOut = 30;
char cPin[256];
memset(cPin, NULL, sizeof(cPin));
dllfunc = (pDLLProc)
::GetProcAddress((HMODULE)hModule, "CT_ReadPin");
int iReturn;
if (dllfunc != NULL){
iReturn = dllfunc(iPort, cExtendPort, iBaudRate, iVoiceType, iTimeOut, cPin, sizeof(cPin));
}
}
现在改为C#的
[DllImport("CT_InfoTerm.dll", EntryPoint = "CT_ClosePinPad" ,CallingConvention=CallingConvention.Cdecl)]
public unsafe static extern int CT_ReadPin(int iPortNo, char extendPort, int iBaudRate, int iVoiceType, int iTimeOut, StringBuilder Pin, int iPinSize);
public unsafe void CT_ReadPin(WebCommand command)
{
int nRet = -3;//打开串口失败(默认)
if (_canRead)
{
int iPortNo = 0;
char extendPort = '9';
int iBaudRate = 9600;
int iVoiceType = Convert.ToInt16(command.Parameter);
int iTimeOut =30;
//var Pin=new byte[100];
StringBuilder Pin = new StringBuilder(1024);
// string Pin = new string(Convert.ToChar(" "), 256);
// char Pin = new char();
int iPinSize =256;
nRet = Centerm.CT_ReadPin(iPortNo,extendPort,iBaudRate,iVoiceType,iTimeOut,Pin,iPinSize);
checkresult(command, nRet);
}
}
pin是返回值
注释的地方是我尝试的方法,并不报任何错误,但是C#的调用不成功,可能是pin这个参数有问题.
各位大神能不能提供一些思路,供我参考一下,多谢
- 点赞
- 回答
- 收藏
- 复制链接分享
1条回答
为你推荐
- C#调用C++ Dll 返回信息与C++返回结构体中信息不一致?
- c++
- 4个回答
- 从Go语言调用的C#DLL(类库)函数
- dll
- c#
- 1个回答
- c#无法使用QtCreator封装的dll,报错误System.BadImageFormatException
- c++
- c#
- visual studio
- 1个回答
- C++ DLL方式调用函数转为 C# 时,参数该怎么定义
- c++
- c#
- visual studio
- 2个回答
- 请问C#如何自适应去调用C++ 32、64位Dll
- c#
- dll
- 32位
- winform
- 64位
- 3个回答