C# 使用C++写的DLL 提示无法找到入口点
C++代码//异或加密类classCOM_SERVICE_CLASSCXOREncrypt{//函数定义private://构造函数CXOREncrypt(){}//功能...
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是返回值 我怎么得到返回值那 展开
//异或加密类
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是返回值 我怎么得到返回值那 展开
5个回答
展开全部
[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 ,函数默认为私有函数,调用就会出错。
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 ,函数默认为私有函数,调用就会出错。
展开全部
我也遇到 了,我的是函数,没有类,解决方法是在函数前面加上
extern "C" __declspec(dllexport)
声明和实现都得加上,说是这样才是导出函数,
我觉得类也类似,你试试吧,但愿对你有用
extern "C" __declspec(dllexport)
声明和实现都得加上,说是这样才是导出函数,
我觉得类也类似,你试试吧,但愿对你有用
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我对dll文件还不是太懂,期待高手前来指导
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
得到pszEncrypData返回值有两种方法:
1.把int EncryptData()的类型改成string,在这个方法的最后return pszEncrypData就能得到它的值。
2.把参数pszEncrypData改成 ref string pszEncrypData或者out string pszEncrypData,这样传进去的参数在方法内的任何改变都会直接改变方法外部传进去的那个数的值,这样你就能在外部直接使用这个值。这种传参方法叫做引用传参,它传进去的实际上是那个参数的地址。
1.把int EncryptData()的类型改成string,在这个方法的最后return pszEncrypData就能得到它的值。
2.把参数pszEncrypData改成 ref string pszEncrypData或者out string pszEncrypData,这样传进去的参数在方法内的任何改变都会直接改变方法外部传进去的那个数的值,这样你就能在外部直接使用这个值。这种传参方法叫做引用传参,它传进去的实际上是那个参数的地址。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你得在CXOREncrypt.h里定义一个
main函数
main函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询