问题是这样的,一个C++封装的DLL(64位),返回的是一个结构Struct1的指针地址,
C++端是这样的
struct Struct1
{
int i1;
vector *pv1
}
struct Struct2
{
int i2;
vector *pv1
}
,现在的问题是C#端在调用C++的DEBUG版本DLL时可以解出正确值,但是在RELEASE版本时得不到正确值,首先可以肯定的是,DEBUG和RELEASE版本的D
LL都是正确的执行了,C#端怎么处理这个问题?
C#调用C++的DLL(64位)(Debug版本和Release版本结果不同)
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
窝米逗佛~ 2020-04-23 11:46最佳回答 专家已采纳vector最好就在c++那里转换成数组!
c++ 的vector 是模板,c#的是泛类
所以一般写跨语言接口的时候都是使用c的基本类型作为交互,避免出现对齐之类的问题采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(2条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2020-04-23 11:09回答 3 已采纳 vector最好就在c++那里转换成数组! c++ 的vector 是模板,c#的是泛类 所以一般写跨语言接口的时候都是使用c的基本类型作为交互,避免出现对齐之类的问题
- 2018-12-10 06:36回答 3 已采纳 一个方法是安装程序里根据CPU类型决定装32位还是64位版本,这样你代码里只要写DllImport ComMon.dll,CLR到应用程序目录下加载到的就是正确的版本。 另一个方法是32位和
- 2020-03-09 09:31回答 4 已采纳 BYTE bNodeaddr[6]; DWORD dwIp; 这两个写反了 而且考虑到数据对齐,bNodeaddr可能占用的是8个字节,具体你调试的时候看下内存
- 2021-12-06 10:12@榴莲酥的博客 vs C#在Debug模式调用C++的DLL成功,而Release失败
- 2021-04-18 18:17c#项目用visual studio2013(debug是加载x86的dll,release加载的是x64的dll)在项目属性里修改编译环境 win32dll项目用visual studio2015,代码有宏定义还有注释,很全面
- 2018-07-27 10:25c#项目用visual studio2013(debug是加载x86的dll,release加载的是x64的dll)在项目属性里修改编译环境 win32dll项目用visual studio2015,代码有宏定义还有注释,很全面
- 2020-12-01 15:20回答 4 已采纳 创建结构体,显示加载dll,通过stdcall方式调用函数,传递结构体指针进函数
- 2021-08-14 10:34回答 2 已采纳 dll中是不是占用了其他资源没释放,检查C++代码。参考: C#调用c++的dll报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏“ - 亲福 - 博客园 一:c++代码内部报错引
- 2020-07-17 14:43回答 2 已采纳 unsigned char对应byte类型,unsigned char*如果是返回字符数组那么对应byte[]。 返回的数据,一般前面加个ref表示返回(int nChannel, ref int
- 2019-07-22 19:22史上最弱万古流芳的博客 沈某的第一篇文章C#调用C++Dll建立一个C++Dll项目编码.h头文件编码.cpp文件编写.def文件建立一个用于测试的C#项目C#编码测试后记 C#调用C++Dll 由于C#的反编译太过容易,所以之前自己客户端里调用的加密Dll被反编译...
- 2021-07-17 00:06woniu_88的博客 同份源码C/C++中Release和Debug下编译结果不同 问题描述: 经常有同学问我明明是同一份代码,debug模式下没问题,但是只要release模式下编译就有问题,各种报错各种运行错误等。 原因分析: 首先debug模式和...
- 2020-10-16 16:34一米阳光zw的博客 创建C++项目导出C#调用的DLL 步骤 打开VS2017,创建一个控制台应用,命名为U3DDLL(楼主因为该项目已存在所以截图时的名称都是U3DDLL1) 生成的目录基本结构 此时生成的DLL默认为exe程序,修改为dll程序并设置生成...
- 2018-04-13 04:31回答 5 已采纳 1、写一个32位的exe代理程序,此代理程序调用32位dll的功能。 2、32位代理程序与64位主程序之间可使用包括套接字在内的所有Windows进程间通信方法进行功能调用和数据交换。 可参考
- 2018-04-14 04:44回答 4 已采纳 https://blog.csdn.net/nie2314550441/article/details/49867735 请参考
- 2018-08-15 15:49回答 1 已采纳 只有C++ CIL类型的项目,才可以调用C#的命名空间。首先确认下你的项目类型。 其次,检查下你C#代码中namespace的名字是不是Invoke,注意是命名空间名,不是dll名字或者项目名字。注
- 2021-06-13 13:17乐悠厨房的博客 1. 新建项目这里我们使用ATL,来接受C# COM控件向外发送的事件。2. 初始化ATL#include "stdafx.h"CComModule _module;BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){switch ...
- 2020-12-02 16:40HttpCookie的博客 在c# 开发项目中经常会遇到调用c++写的依赖库 有的时候就会发生错误:如下 1.Unable to load DLL 'xxx.dll' or one of its dependencies: 找不到指定的模块。 (0x8007007E)" 这个错误一眼就能看出是缺少依赖引用,...
- 2021-01-05 18:58野生猿流星雨的博客 dll文件可以实现混合语言编程,这一点实用性很强。作为一个初学者的把简单混用的例子记录一下,方便自己查看,也给其他在使用的过程中出现各种问题的小伙伴一个参考。 首先是C++编写dll文件,打开vs,文件>新建&...
- 2015-10-26 04:32回答 1 已采纳 pin是StringBuilder,要转化成String类型啊
- 2021-11-14 21:01WangShade的博客 上周做了下C++生成Dll的总结,但是有些地方还是没有弄特别清楚(比如调用约定的区别,extern "C"的意义),所以这里再重新总结一遍。 2 Dll的导出 先创建一个空项目,空项目意味着我们可以从零开始一步一步配置环境...
- 没有解决我的问题, 去提问