0

私は C# コードで組み込まれた Dll を持っていますが、必要に応じて C++ コードで使用したいと考えています。

長い検索の後、解決策を見つけ、RegASM.exe を使用して abcd.dll ファイルから abcd.tlb を作成しました。

このファイルのインポート後、

#import "D:\\..\\abcd.tlb" raw_interfaces_only

ソリューションをビルドすると、エラーが発生します。

エラー C2380: 'Accepted_Bills' の前にある型 (戻り値の型を持つコンストラクター、または現在のクラス名の不正な再定義?) d:..\abcd.tlh

このエラーを検索すると、ある構造がわかりました。

struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
    long Denomination;
    __int64 Accepted_Bills;
};

そのメンバーの一人と同じ名前を持っています。これは C++ では許可されていません。これをコンパイルするために Visual Studio 2010 を使用しています。

誰でもこのエラーを削除するのを手伝ってもらえますか? よろしくお願いします!!

4

2 に答える 2

2

最も簡単な解決策は、インターフェイスのマネージ側で宣言を変更することです。構造体またはフィールドの名前を変更します。

それをしたくない場合は、C++ コードを変更する必要があります。例えば:

struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
    long Denomination;
    __int64 _Accepted_Bills;
};

ビルドして手動生成に切り替えるたびに、ヘッダー ファイルの自動生成を停止する必要があります。

インターフェースの両側を制御しているので、C# コードを変更することが最も簡単な解決策であるように私には思えます。

于 2013-05-16T10:49:08.987 に答える