永发信息网

关于C++调用C#的DLL问题。

答案:2  悬赏:40  手机版
解决时间 2021-01-25 00:39
在C#中。我定义了一个委托类型public delegate void CallTest(int i);然后定义了一个变量:public CallTest mCallTest;
封装成DLL。
在C++中应用了这个库。请问怎么给mCallTest赋值?我在C++中定义了一个函数。怎么赋给MCallTest?
最佳答案
先将DLL转成Com类型,然后再C#中按照Com类型调用DLL。
示例如下:
C#代码:工程名ManagedDLL

using System;
namespace ManagedDLL
{
    // Interface declaration.
    public interface ICalculator
    {
        int Add(int Number1, int Number2);
    };
    // Interface implementation.
    public class ManagedClass:ICalculator
    {
       public int Add(int Number1,int Number2)
       {
           return Number1+Number2;
       }
    }
}把AssemblyInfo.cs中的 assembly: ComVisible改成true
注册DLL:RegAsm.exe ManagedDLL.dll /tlb:ManagedDLL.tlb /codebase
在C++代码中:(工程属性里设置/clr:oldSyntax)
#include "stdafx.h"
#include "tchar.h"
#import "..\ManagedDLL\bin\Debug\ManagedDLL.tlb" raw_interfaces_only
using namespace ManagedDLL;
int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr = CoInitialize(NULL);    // Initialize COM.
    ICalculatorPtr pICalc(__uuidof(ManagedClass));
    long lResult = 0;
    pICalc->Add(5, 10, &lResult);    // Call the Add method.
    wprintf(L"The result is %d\n", lResult);
    CoUninitialize();    // Uninitialize COM.
    return 0;
}
全部回答
c#的结构定义 修改一下试试 public struct cthostftdcrequserloginfield { ///交易日 [marshalas(unmanagedtype.lpstr)] public string tradingday; 参考: internal struct copydatastruct { public intptr dwdata; private int _cbdata; [marshalas(unmanagedtype.lpstr)] private string _lpdata; public int cbdata { get { return _cbdata; } } public string lpdata { get { return _lpdata; } set { byte[] sarr = encoding.default.getbytes(value); _cbdata = sarr.length + 1; _lpdata = value; } } } [dllimport("user32.dll", entrypoint = "postmessage")] internal static extern int postmessage( int hwnd, int msg, int wparam, int lparam );
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
技校里有没有 律师 科目的,我高中毕业,可以
下图1曲线表示不同生长素浓度对植物根和茎生
疾风劲草中疾的意思
作文写一件妈妈爸爸为了我们成长的事情(令人
现在初中 段考满分940,考800分,高中考600会
感冒了,流黄鼻涕,吃什么药
【一担多少斤】一担等于多少公斤
精装修的房子同户型装修的都一样吗
饺子在不同年代的称呼
有关隔离的描述,错误的是A.是控制传染病流行
紧急按钮开关和一般按钮开关的区别
做肠粉的生抽酱油要煮的吗?是用煮过的好点还
是南宁14中的进来!!!!
(10分)一个顾客走进一家,自称是某运输公司
为什么辟谷就能来月经呢
推荐资讯
厦门城跃装修工程有限公司怎么样?
专科读完想继续读本科有哪几种途径?以及这些
东华大学综合分怎么算的,我专业考了212,那
买车,一汽大众高尔夫6,高尔夫7。现在买哪个
做吉林省梅河口市小学英语教师和商务局的公务
摩托车传动两片甩块能改三片甩块吗
永安旅馆(邯郸肥乡县)地址在什么地方,我要处
一个扇形的弧长与面积的数值都是5,求这个扇
遂墨以葬文公,晋于是始墨的翻译
优雅网吧地址好找么,我有些事要过去
成语都在哪些千古名言的诗句里面?
【农历六月初一】农历六月初一日子好吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?