C#调用c++封装的dll 无返回 10

1、我有一个C++的dll,c++dll中导出的函数名为fnc_3des_decrypt_data@@YAPAEPAE@Z,是一个解密的函数,我在用vs2010创建c++... 1、我有一个C++的dll,c++ dll中导出的函数名为fnc_3des_decrypt_data@@YAPAEPAE@Z,是一个解密的函数,我在用vs2010创建c++控制台程序测试,另外自己写了一个函数dm_decode调用c++ dll的fnc_3des_decrypt_data@@YAPAEPAE@Z,是没问题的,可以正常解密;2、因为fnc_3des_decrypt_data@@YAPAEPAE@Z 是提供方提供的dll里面的函数,提供方没设置好,编译后的dll导出函数名乱七八糙的,我就自己创建了一个c++的dll (DecodeDemo.dll)重新封装了fnc_3des_decrypt_data@@YAPAEPAE@函数 (其实就是1中说到的dm_decode函数,只不过在这里封装成了dll),新的dll导出的函数名dm_decode。dm_decode 函数的原型:extern "C" unsigned char* __stdcall dm_decode(unsigned char* enc_dat);3. 在c#的控制台程序中引入dll [DllImport("DecodeDemo.dll",CharSet = CharSet.Ansi, SetLastError = true)] public unsafe static extern string dm_decode(string enc_data);然后在program.cs文件中调用函数 string decdata = dm_decode("8E313E99CBA24DC528EF42253F3A09F3");但是变量decdata收到的却是null,真是想不通,明明我在第1步c++的控制台程序中测试dm_decode函数的时候是没问题的,正常返回,但是在c#调用就出出问题。拜求c++、c#的大神帮忙解惑,好人一生平安 展开
 我来答
百度网友c5fef32
2019-05-22 · TA获得超过2213个赞
知道小有建树答主
回答量:5888
采纳率:52%
帮助的人:205万
展开全部
运行库组件
你可以在腾讯电脑管家的电脑诊断中找到软件问题,选择丢失VC++组件,点击立即修复。

在工具箱,打开电脑诊所,丢失.Dll 文件,进行一键修复
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
出色且精心丶饼干9329
2019-05-20 · TA获得超过9417个赞
知道大有可为答主
回答量:1.2万
采纳率:85%
帮助的人:684万
展开全部
C++ 代码里在数组最后加一个不可能的数字比如-1,之后在C# 里面读出来:
C++ 代码:
char *A(char buf[])
{
char buffer[50]={};
int i = 0;
while(buf[i] != '/0' && i < 49) {
buffer[i] = buf[i]
i++;
}

buffer[i] = -1;
return buffer;
}
/////////////////////////////
C# 代码:
unsafe{
char* buffer = A(buf);
int i = 0;
while(buffer[i++] != -1) {
Console.out.writeln(buffer[i]);
}
}
或者可以在DLL 里面再写一个函数int getSize() 返回数组的长度:
C++代码:
static int size = 0;
int getSize(){
return size;
}
char *A(char buf[])
{
char buffer[50]={};
while(buf[i] != '/0' && i < 49) {
buffer[i] = buf[i]
size++;
}
return buffer;
}
C#代码:
C# 代码:
unsafe{
char* buffer = A(buf);
int size = getSize();
for(int i = 0; i < size; i++) {
Console.out.writeln(buffer[i]);
}
}
追问

你的意思在是在调用解密函数dec_str=dec(enc_data)的时候,在返回的数据dec_str的末尾加上-1吗。 我在末尾加上-1之后,在c++的控制台程序中和先前以前可以正常解密,返回。

但是如果把这个函数封装成dll供c#调用,在c#中调用c++ dll中的de_code还是什么都没收到

c#中的调用:

c#导入

c#调用c#

最终buffer的指针什么都没收到,地址是0x00000000

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式