VisualStdio2005のC++でのDLLを読出しについて質問です。


http://d.hatena.ne.jp/kasei_san/20070511
上記リンクの「バッドノウハウ」にあるように
DLL読み出し側のプロジェクトの「共通言語ランタイムサポート」が/clr:pureである場合に、
暗黙リンクでDLLを設定し、__declspec(dllimport) にてDLLのクラスをimportしようとすると、コンパイルエラーとなってしまいます。

「共通言語ランタイムサポート」が/clr:pureの場合の一般的なDLLの読み出し方法をご存知の方よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/05/16 08:53:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kaorun No.1

回答回数44ベストアンサー獲得回数10

ポイント35pt
Visual C++ コンパイラ オプション
/clr (共通言語ランタイムのコンパイル)  
http://msdn2.microsoft.com/ja-jp/library/k8d11d4s(VS.80).aspx

CLRとは何かきちんと理解していますか?

/clr:pureオプションを使う場合、すべてはCLR上で動作するマネージドコードでなくてはならず、当然ネイティブコードを含むDLLを呼び出すこともできません。

つまり、質問されているような方法は不可能ということになります。

id:kasei_san

なるほど…。CLRについての理解が不足していました。

/clr:pure だと、非clrな(すなわち、アンマネージドコード)なコードを読み出すことは、不可能なのですね。

ただ、下にあるように特定の条件を満たせば、読み出すことも不可能ではない…と。

どうもありがとうございます。

非常に参考になりました!

2007/05/12 12:08:10

その他の回答1件)

id:kaorun No.1

回答回数44ベストアンサー獲得回数10ここでベストアンサー

ポイント35pt
Visual C++ コンパイラ オプション
/clr (共通言語ランタイムのコンパイル)  
http://msdn2.microsoft.com/ja-jp/library/k8d11d4s(VS.80).aspx

CLRとは何かきちんと理解していますか?

/clr:pureオプションを使う場合、すべてはCLR上で動作するマネージドコードでなくてはならず、当然ネイティブコードを含むDLLを呼び出すこともできません。

つまり、質問されているような方法は不可能ということになります。

id:kasei_san

なるほど…。CLRについての理解が不足していました。

/clr:pure だと、非clrな(すなわち、アンマネージドコード)なコードを読み出すことは、不可能なのですね。

ただ、下にあるように特定の条件を満たせば、読み出すことも不可能ではない…と。

どうもありがとうございます。

非常に参考になりました!

2007/05/12 12:08:10
id:kaorun No.2

回答回数44ベストアンサー獲得回数10

ポイント35pt

失礼しました。

上記の回答は、私の理解不足と早とちりにより正しい答えとは言えないようです。

/clr:pureでもアンマネージDLLを呼ぶことは可能のようですね。

ものすごく手短に調べた範囲では、

Some interop Questions - C# to unmanaged DLL
http://www.thennews.com/d/n56/Some%20interop%20Questions%20C%20t...
  • [DllImport]属性で呼び出し可能なのは非クラスメンバー関数のみ
  • 呼び出すDLLへの依存関係がmanifestまたはstatic linkなどで明確になっていること

などのポイントがあるようです。

細かい点で自分の理解もまだあやふやなので、この質問への私の回答に対するポイントは不要です。

id:kasei_san

いえいえ、私が理解していない部分について、回答いただけたので、ご迷惑で無ければ、ポイントを入れさせていただきます。

どうもありがとうございました。

2007/05/12 12:16:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません