- - PR -
C#:VC6で作成したDLLを使用する方法について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-15 11:55
現在VS2003 C#でプログラムを作成中ですが、
VC6で作成したDLLの関数を呼び出すという事がしたいのですが 方法が分かりません。 質問: 1)VC6で作成したDLLをC#で使用出来るのか? 2)使用出来るのであれば、どのようにすれば使用可能か? 以上、ご教授お願いします。 | ||||||||||||
|
投稿日時: 2006-12-15 12:02
VC6でどのようにして作成されたDLLなのかによります。
単なる Win32 DLL であれば DllImports あたりを使えば使うことが出来るでしょう。 MFCのDLLの場合、引数とかにMFCのクラスを使わなければOKそう。 (DLL内のクラスは当然使えません。そのようなつくりにしたいのであれば、DLLをActiveXとして作り直すか、 C#ではなく、MC++で直接つかうかしてください。) [ メッセージ編集済み 編集者: Blue 編集日時 2006-12-15 12:02 ] | ||||||||||||
|
投稿日時: 2006-12-15 12:10
使える形式・・・つまるところレガシーDLLやCOMであれば普通に使えます。
レガシーDLLならWindows APIを呼び出すのと同じ要領ですし、COMならCOM Interop(・・・だっけ?)を使ってください。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||||||
|
投稿日時: 2006-12-15 16:44
すみません。説明が不足していました。
VC6で作成したDLLは標準のWIN32 DLLです。 [DllImport("...")]を使用する方向で作業を進めていますが、 下記問題点が発生しました。 問題点: 1)VC6のDLL関数内で「HANDLE*」型を使用している 2)VC6のDLL関数内で「const char*」型を使用している 3)C#ではC++の「*」を「out」と表記すれば宜しいのでしょうか? 以上、ご教授宜しくお願いします。 | ||||||||||||
|
投稿日時: 2006-12-15 16:57
MSDNにそこらへんの説明をしたのがあったような。
(マネージドアンマネージド相互運たらってのだったかな) (追記) これだぁ。↓ http://msdn2.microsoft.com/ja-jp/library/sd10k43k(VS.80).aspx
C#ではポインタ型は全て System.IntPtr で扱うとよいでしょう。 ただ、これを使っている関数で HANDLE の値を設定させるのであるという場合 ref System.IntPtr h のような指定になるかも。
これは、String型でCharSetをAnsiで指定すればいいでしょう。 ここら辺は、C#でWinAPIの〜〜Aを使っているような例を参考にされるとよいでしょう。
ケースバイケースのような気がします、 ref を指定すればいいのか out でいいのかそれとも IntPtrの値渡しでいいのかは 関数の使い方がわからないのでなんともいえないでしょう。 [ メッセージ編集済み 編集者: Blue 編集日時 2006-12-15 17:10 ] | ||||||||||||
|
投稿日時: 2007-01-09 18:33
教えて頂いた方法で解決しました。
ありがとうございました。 |
1