簡體   English   中英

從C ++調用C#COM DLL

[英]Calling C# COM DLL from C++

C ++代碼如下

#include "stdafx.h"
#include <Windows.h>
#import "C:\shreyas\Documents\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.tlb" no_namespace

int _tmain(int argc, _TCHAR* argv[])
{

    CoInitialize(NULL);
    IMyClassPtr obj;

    //iProgramPtr obj;
    obj.CreateInstance(__uuidof(MyClass));
    printf("value: %d",obj->display());
    CoUninitialize();
    getchar();

    return 0;
}

C#代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading.Tasks;

namespace demo
{
    [ComVisible(true)]
    public interface IMyClass
    {
        int display();
    }


    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    class MyClass : IMyClass
    {
        public int display()
        {
            Console.WriteLine("Hello");
            return 10;
        }
    }
}

我想從C ++代碼調用C#顯示函數。 我已經在C#項目屬性中完成了所需的設置。 在代碼obj.CreateInstance(__uuid(MyClass)); MyClass給出錯誤作為未定義的標識符。

請注意在編譯ConsoleApplication1時收到的生成警告:

警告MSB3214:“ C:... \\ ConsoleApplication1 \\ bin \\ Debug \\ ConsoleApplication1.dll”不包含可以為COM Interop注冊的任何類型。

那當然不好。 使用Oleview.exe的View + Typelib命令查看.tlb文件時,還會看到一些內容。 或使用文本編輯器打開#import指令生成的.tlh文件,然后在C ++項目的Debug目錄中找到它。 您會看到MyClass完全丟失,因此出現編譯錯誤。

這是因為:

   class MyClass : IMyClass

您忘了宣布它為public 需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM