最近在写一个dll库,准备用C#调用
dll库是这样的
————–.h文件——————
#include “iostream”;
using namespace std;
#define METHODSDLL_API __declspec(dllexport)
EXTERN_C METHODSDLL_API int _stdcall NumOfAisle(string Msg);
EXTERN_C METHODSDLL_API int _stdcall Add(int a,int b);
——————cpp文件——————
#include “stdafx.h”
#include “MethodsDLL.h”
#include “iostream”;
using namespace std;
METHODSDLL_API int _stdcall NumOfAisle(string Msg)
{
string ch_NumOfAisle= Msg.substr (11,1);
int int_NumOfAisle=atoi(ch_NumOfAisle.c_str());
switch(int_NumOfAisle)
{
case 1:
return 1;
break;
case 8:
return 8;
break;
default:
return -1;
break;
}
}
METHODSDLL_API int _stdcall Add(int a,int b)
{
return a+b;
}
同样两个函数,为啥Add函数就能在C#里面正确调用,上面那个NumOfAisle函数就显示找不到访问入口点呢?
dll库是这样的
————–.h文件——————
#include “iostream”;
using namespace std;
#define METHODSDLL_API __declspec(dllexport)
EXTERN_C METHODSDLL_API int _stdcall NumOfAisle(string Msg);
EXTERN_C METHODSDLL_API int _stdcall Add(int a,int b);
——————cpp文件——————
#include “stdafx.h”
#include “MethodsDLL.h”
#include “iostream”;
using namespace std;
METHODSDLL_API int _stdcall NumOfAisle(string Msg)
{
string ch_NumOfAisle= Msg.substr (11,1);
int int_NumOfAisle=atoi(ch_NumOfAisle.c_str());
switch(int_NumOfAisle)
{
case 1:
return 1;
break;
case 8:
return 8;
break;
default:
return -1;
break;
}
}
METHODSDLL_API int _stdcall Add(int a,int b)
{
return a+b;
}
同样两个函数,为啥Add函数就能在C#里面正确调用,上面那个NumOfAisle函数就显示找不到访问入口点呢?
解决方案
30
NumOfAisle(string Msg);C#中不认识C++的string,修改为const char *
15
std::string到了C#那边无法处理,跨语言调用的DLL,参数最好都是基本C类型
15
C#调用C++写的DLL,参数和返回值,只能是基本类型、或结构体。使用结构体时,需要在C#的代码中,为C++函数的声明添加特性声明和辅助代码。