[英]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.