您尚未登录。

楼主 #1 2018-05-02 10:00:50

箜想
会员
注册时间: 2018-05-02
已发帖子: 6
积分: 6

C++调用C#DLL中的函数碰到的问题求各位大神支招!

TIM20180502095312.png
-----------------------------代码如上
需要调用DLL中的GenerateTmatrixCodeByArea该方法接收的参数有如下
TIM20180502095551.png

-----------------------------编译通过运行之后,报如下错误
TIM20180502095754.png

离线

#2 2018-05-02 10:52:57

熊哥哥
会员
注册时间: 2017-09-07
已发帖子: 18
积分: 18

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

用VSC++里面的CLR
或者使用COM

离线

#3 2018-05-02 10:53:39

cityf
会员
注册时间: 2017-11-03
已发帖子: 195
积分: 195

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

方便把脱水的demo工程文件发上来吗?
我帮你看一下。

离线

#4 2018-05-02 10:54:05

熊哥哥
会员
注册时间: 2017-09-07
已发帖子: 18
积分: 18

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

离线

楼主 #5 2018-05-02 11:02:13

箜想
会员
注册时间: 2018-05-02
已发帖子: 6
积分: 6

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

离线

楼主 #6 2018-05-02 11:03:14

箜想
会员
注册时间: 2018-05-02
已发帖子: 6
积分: 6

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

cityf 说:

方便把脱水的demo工程文件发上来吗?
我帮你看一下。

不好意思  Demo就是上面我发的了  因为这个DLL是第三方提供的有注册机制 给你们的话 可能还需要破解才能正常运行

离线

#7 2018-05-02 11:37:14

熊哥哥
会员
注册时间: 2017-09-07
已发帖子: 18
积分: 18

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

箜想 说:

bool 类型是不是搞错了 改为boolean

离线

楼主 #8 2018-05-02 12:30:07

箜想
会员
注册时间: 2018-05-02
已发帖子: 6
积分: 6

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

熊哥哥 说:
箜想 说:

bool 类型是不是搞错了 改为boolean

试过了还是一样的错

离线

#9 2018-05-02 13:13:03

kgp0213
会员
注册时间: 2018-01-15
已发帖子: 149
积分: 149

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

以下内容是我搬运过来的~
-----------------------------------------------
N种方法使用C++调用C#.NET库
2015年12月08日 17:27:51
阅读数:2139
为了减少篇幅,此文不描述何种场景下需要使用C++调用C#/VB等托管代码,而直接给出三种常规方法和一些变通方法以供参考。

常规方法1:COM
使用C#把托管类注册成COM,用regasm.exe注册output assembly,然后用C++像调用COM一样调用assembly里面的type。
优点:编写代码简单,调用方便
缺点:需要注册output,发布不够简单
参考:http://www.codeproject.com/KB/cs/ManagedCOM.aspx

常规方法2:CLR
C#常规编写类,生产assembly,C++使用CLR编译既可直接引用托管类。
优点:编写代码简单,调用方便
缺点:需要了解C++ CLR语法(既不像C++,又不像C#,总之很奇怪)
参考:http://www.codeproject.com/KB/mcpp/cppcliintro01.aspx ,http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx

常规方法3(推荐):API
C#常规编写类,生产assembly,C++使用SDK提供的CLR非托管接口(CLRCreateInstance)进行调用。
优点:传统C#编程,传统C++编程
缺点:暂时还没发现
参考:http://nport.codeplex.com/SourceControl/changeset/view/45681#903468 ,http://msdn.microsoft.com/en-us/library/dd537633.aspx

变通方法:
1. 使用C#/VB包装现有托管类,注册成Windows服务,暴露SOAP web service。VC2005可以使用非托管代码添加引用Web service。
2. 使用C#/VB包装现有托管类,注册成Windows服务。C++利用Windows message和服务通讯。
3. 使用C#/VB包装现有托管类,注册成Windows服务。C++利用Windows共享内存和服务通讯。
其实利用双进程通讯的方法,可以演变出各种各样调用的思路。聪明的你可以充分发挥想象力,写出自己独有的调用模式。

最近编辑记录 kgp0213 (2018-05-02 13:14:34)

离线

楼主 #10 2018-05-02 14:54:26

箜想
会员
注册时间: 2018-05-02
已发帖子: 6
积分: 6

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

kgp0213 说:

以下内容是我搬运过来的~
-----------------------------------------------
N种方法使用C++调用C#.NET库
2015年12月08日 17:27:51
阅读数:2139
为了减少篇幅,此文不描述何种场景下需要使用C++调用C#/VB等托管代码,而直接给出三种常规方法和一些变通方法以供参考。

常规方法1:COM
使用C#把托管类注册成COM,用regasm.exe注册output assembly,然后用C++像调用COM一样调用assembly里面的type。
优点:编写代码简单,调用方便
缺点:需要注册output,发布不够简单
参考:http://www.codeproject.com/KB/cs/ManagedCOM.aspx

常规方法2:CLR
C#常规编写类,生产assembly,C++使用CLR编译既可直接引用托管类。
优点:编写代码简单,调用方便
缺点:需要了解C++ CLR语法(既不像C++,又不像C#,总之很奇怪)
参考:http://www.codeproject.com/KB/mcpp/cppcliintro01.aspx ,http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx

常规方法3(推荐):API
C#常规编写类,生产assembly,C++使用SDK提供的CLR非托管接口(CLRCreateInstance)进行调用。
优点:传统C#编程,传统C++编程
缺点:暂时还没发现
参考:http://nport.codeplex.com/SourceControl/changeset/view/45681#903468 ,http://msdn.microsoft.com/en-us/library/dd537633.aspx

变通方法:
1. 使用C#/VB包装现有托管类,注册成Windows服务,暴露SOAP web service。VC2005可以使用非托管代码添加引用Web service。
2. 使用C#/VB包装现有托管类,注册成Windows服务。C++利用Windows message和服务通讯。
3. 使用C#/VB包装现有托管类,注册成Windows服务。C++利用Windows共享内存和服务通讯。
其实利用双进程通讯的方法,可以演变出各种各样调用的思路。聪明的你可以充分发挥想象力,写出自己独有的调用模式。

这些文章貌似对于我的问题没有实际的应用,我现在的问题我感觉是不是应该对于System::array<>^ 在C++和C#之间是否需要一层转换还是怎么样

离线

#11 2018-05-02 15:02:45

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,342
积分: 9202

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

感觉你可以先用其他类型的变量传递数据,
比如整数,定长数组什么的,
确认没问题再用 System::array<>^





在线

#12 2018-05-02 15:03:06

熊哥哥
会员
注册时间: 2017-09-07
已发帖子: 18
积分: 18

Re: C++调用C#DLL中的函数碰到的问题求各位大神支招!

熊哥哥 说:
箜想 说:

bool 类型是不是搞错了 改为boolean

最好是问问提供者,或者用.NET看看参数具体的格式

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn