|
分類:[.NET 全般]
こんにちわ。
現在、
@ネイティブのDLLを書いて、
AC++/CLIでラッパーDLLを書いて、
BC#で使用しようと思っています。
ネイティブで定義されている
enum class sample : int
{
test1 = 0,
test2,
};
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
class TEST_API TEST
{
public:
TEST() {}
virtual ~TEST() {}
public:
sample TestMethod();
};
これを使ってネイティブ部分とラッパーを書いています。
そこまでは問題はなくこのラッパーを使い、C#から使用しようとすると、
アクセスレベルの問題で enumにアクセスできません。
原因は、ラッパのコンパイル時に public enum class にしていない為だと思います。
このネイティブのヘッダに
#ifdef __cplusplus_cli
#define ENUMKEYWORD public
#else
#define ENUMKEYWORD
#endif
ENUMKEYWORD enum class sample : int
{
test1 = 0,
test2,
};
上記を追加して、C++/CLI 時には public というキーワードをつけるようにしたのですが、
この定義には互換性がないようで、C++/CLIのラッパーのコンパイル時に
warning C4272: 'TEST::TestMethod': __declspec(dllimport) に設定されています。関数をインポートするときは、ネイティブ呼び出し規約を指定しなければなりません。
と怒られて、使用できなくなってしまいます。
これらを解決し、C#からも enum class sample の定義にアクセスする事ができるでしょうか?
申し訳ありませんが、よろしくご教示お願い致します。
|