C# 使用C++写的DLL 提示无法找到入口点

来源:百度知道 编辑:UC知道 时间:2024/06/05 23:57:31
C++代码
//异或加密类
class COM_SERVICE_CLASS CXOREncrypt
{
//函数定义
private:
//构造函数
CXOREncrypt() {}

//功能函数
public:
//生成密文
static WORD EncryptData(LPCTSTR pszSrcData, LPTSTR pszEncrypData, WORD wSize);
//解开密文
static WORD CrevasseData(LPCTSTR pszEncrypData, LPTSTR pszSrcData, WORD wSize);
};
C# 调用DLL代码
[DllImport("ComService.dll")]
public static extern int EncryptData(string pszSrcData, string pszEncrypData, int wSize);
C# 初始化代码
EncryptData(this.textBox6.Text, this.textBox7.Text,1);
编译的时候 没有任何问题 可是运行的时候就提示 无法找到入口点
DLL的名字为 ComService.dll
各位大大帮下小弟哦
现在入口已经找到了
可是有个问题 C# 代码中的 EncryptData(string pszSrcData, string pszEncrypData, int wSize);
pszEncrypData是返回值 我怎么得到返回值那

[DllImport("XXXXXX.dll") ]
public static extern int function(parameter1,parameter2,..);
参数类型要写对 是否需要ref
还要注意调用方式
类型对照:
BSTR --------- StringBuilder
LPCTSTR --------- StringBuilder
LPCWSTR --------- IntPtr
handle---------IntPtr
hwnd-----------IntPtr
char *----------string
int * -----------ref int
int &-----------ref int
void *----------IntPtr
unsigned char *-----ref byte
Struct需要在C#里重新定义一个Struct
CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);
注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。

得到pszEncrypData返回值有两种方法:
1.把int EncryptData()的类型改成string,在这个方法的最后return pszEncrypData就能得到它的值。

2.把参数pszEncrypData改成 ref string pszEncrypData或者out string pszEncrypData,这样传进去的参数在方法内的任何改变都会直接改变方法外部传进去的那个数的值,这样你就能在外部直接使用这个值。这种传参方法叫做引用传参,它传进去的实际上是那个参数的地址。

我也遇到 了,我的是函数,没有类,解决方法是在函数前面加上
extern "C" __declspec(dllexport)