有关C++Dll动态链接库的问题

C++语言 码拜 8年前 (2016-05-16) 887次浏览
最近在写一个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函数就显示找不到访问入口点呢?
解决方案

30

NumOfAisle(string  Msg);C#中不认识C++的string,修改为const char *

15

std::string到了C#那边无法处理,跨语言调用的DLL,参数最好都是基本C类型

15

C#调用C++写的DLL,参数和返回值,只能是基本类型、或结构体。使用结构体时,需要在C#的代码中,为C++函数的声明添加特性声明和辅助代码。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明有关C++Dll动态链接库的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)