C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Native→C++/CLIラッパ→C# 定数について


(過去ログ 130 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■77144 / inTopicNo.1)  Native→C++/CLIラッパ→C# 定数について
  
□投稿者/ 納豆 (1回)-(2015/09/17(Thu) 05:23:44)

分類:[.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 の定義にアクセスする事ができるでしょうか?

申し訳ありませんが、よろしくご教示お願い致します。



引用返信 編集キー/
■77145 / inTopicNo.2)  Re[1]: Native→C++/CLIラッパ→C# 定数について
□投稿者/ Hongliang (345回)-(2015/09/17(Thu) 06:46:25)
無理です。
C++/CLIで再定義してください。

// C言語用インターフェイスがあるならそれ使ってC#でライブラリ化した方が早いかも。
引用返信 編集キー/
■77155 / inTopicNo.3)  Re[1]: Native→C++/CLIラッパ→C# 定数について
□投稿者/ Azulean (519回)-(2015/09/17(Thu) 22:39:40)
再定義を手間に感じるのであれば、SWIG などのラッパーコードを自動生成するツールを使うとかですね。
引用返信 編集キー/
■77157 / inTopicNo.4)  Re[2]: Native→C++/CLIラッパ→C# 定数について
□投稿者/ 納豆 (2回)-(2015/09/18(Fri) 04:17:09)
ご回答して頂いたみなさん、ありがとうございました。
なるほど、無理ですか。

再定義、というのは同一名でないEnumを C++/CLIで作り直すという認識で正しいでしょうか?

引用返信 編集キー/
■77158 / inTopicNo.5)  Re[3]: Native→C++/CLIラッパ→C# 定数について
□投稿者/ Hongliang (346回)-(2015/09/18(Fri) 06:08:36)
> 再定義、というのは同一名でないEnumを C++/CLIで作り直すという認識で正しいでしょうか?
はい。
// 名前空間を分けるなら型名自体は同じでも良いですけど。
引用返信 編集キー/
■77191 / inTopicNo.6)  Re[4]: Native→C++/CLIラッパ→C# 定数について
□投稿者/ 納豆 (3回)-(2015/09/20(Sun) 23:30:45)

> // 名前空間を分けるなら型名自体は同じでも良いですけど。

なるほど。やってみます。
ありがとうございました!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -