[英]Compilation error when importing .net type library
我正在嘗試在C ++ Builder(10.3)中使用第三方.net DLL。
我用regasm.exe為dll創建了一個.tlb文件。 然后我轉到“導入類型庫”並選擇已注冊的.tlb,然后選擇安裝到新包中。
構建包時,我在生成的文件mscorlib_TLB.h中出錯(我沒有.net的經驗,但我知道mscorlib是.net中需要的基類)。
以下是一些錯誤消息和源代碼行:
[bcc32c錯誤] mscorlib_TLB.h(2321):匿名結構的聲明必須是一個定義:
interface DECLSPEC_UUID("{84E7AC09-795A-3EA9-A36A-5B81EBAB0558}") _Nullable;
[bcc32c錯誤] mscorlib_TLB.h(2322):預期類型:
typedef TComInterface<_Nullable, &IID__Nullable> _NullablePtr;
[bcc32c錯誤] mscorlib_TLB.h(4426):C ++需要所有聲明的類型說明符:
typedef _Nullable Nullable;
[bcc32c錯誤] mscorlib_TLB.h(4426):nullability說明符'_Nullable'不能應用於非指針類型'int':
typedef _Nullable Nullable;
[bcc32c錯誤] mscorlib_TLB.h(12060):匿名結構的聲明必須是一個定義:
interface _Nullable : public IDispatch
[bcc32c錯誤] mscorlib_TLB.h(22823):expect')'mscorlib_TLB.h(22822):匹配這個'(':
virtual HRESULT STDMETHODCALLTYPE MarshaledObject(VARIANT obj/*[in]*/,
Mscorlib_tlb::_ObjRef* or/*[in]*/) = 0; // [-1]
我也嘗試使用'Import .NET Assembly'導入.net dll,但這給了'OLE Error'。
知道我錯過了什么嗎?
編輯:
我編寫了自己的類庫(我之前從未使用過C#,我希望我可以在沒有它的情況下在C ++ Builder中使用.NET dll)並嘗試將其導入C ++ Builder。 但是我在(在C ++ Builder中)生成的mscorlib_TLB.h中得到了完全相同的錯誤。 但是這個庫,我可以使用選擇'Import .NET Assembly'導入。
using System;
using System.Runtime.InteropServices;
namespace ClassLibraryTest
{
[ClassInterface(ClassInterfaceType.None)]
public class TestKlass
{
public int Funkt1(int x)
{
x = x + 1;
return x;
}
public int Funkt2(int x)
{
x = x + 2;
return x;
}
public string Funkt3(string str)
{
return "str:" + str;
}
}
}
我已經嘗試過Atozed的Crosstalk工具,用於在C ++ Builder中使用.NET程序集。 在那里我可以導入.NET DLL。 但只有我寫的庫,所需的dll也給我錯誤。 我現在的計划是在C#中編寫我自己的(干凈的)接口,用它來與所需的dll對話並通過Crosstalk導入到C ++ Builder。
我也遇到過這個問題。
問題是mscorlib有一個Nullable接口,在mscorlib_TLB.h文件中聲明為_Nullable。 _Nullable也是C ++ 17類型說明符,因此編譯器不會將其識別為定義。
至少在C ++ Builder版本10.3.2中,有一個修復程序。 如果您使用10.3.2重新導入,這將起作用,如果您不需要其他功能,則可以避免使用AtoZed工具。
Rad Studio的\\ bin文件夾中有一個導入映射文件,tlibimp.sym。 10.3.2將_Nullable映射到_ Nullable _,這樣它就不會干擾C ++ 17語法。 您可以在此處查看如何在Embarcadero文檔中編輯該文件。
我還發現我需要為未編寫的C#類編寫干凈的C#包裝器。 一個例子是Crystal Reports。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.