- PR -

C#:VC6で作成したDLLを使用する方法について

1
投稿者投稿内容
ひろ@質問です。
会議室デビュー日: 2006/12/04
投稿数: 7
投稿日時: 2006-12-15 11:55
現在VS2003 C#でプログラムを作成中ですが、
VC6で作成したDLLの関数を呼び出すという事がしたいのですが
方法が分かりません。

質問:
1)VC6で作成したDLLをC#で使用出来るのか?
2)使用出来るのであれば、どのようにすれば使用可能か?

以上、ご教授お願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 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 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-12-15 12:10
引用:

質問:
1)VC6で作成したDLLをC#で使用出来るのか?


使える形式・・・つまるところレガシーDLLやCOMであれば普通に使えます。

引用:

2)使用出来るのであれば、どのようにすれば使用可能か?


レガシーDLLならWindows APIを呼び出すのと同じ要領ですし、COMならCOM Interop(・・・だっけ?)を使ってください。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
ひろ@質問です。
会議室デビュー日: 2006/12/04
投稿数: 7
投稿日時: 2006-12-15 16:44
すみません。説明が不足していました。
VC6で作成したDLLは標準のWIN32 DLLです。

[DllImport("...")]を使用する方向で作業を進めていますが、
下記問題点が発生しました。

問題点:
1)VC6のDLL関数内で「HANDLE*」型を使用している
2)VC6のDLL関数内で「const char*」型を使用している
3)C#ではC++の「*」を「out」と表記すれば宜しいのでしょうか?

以上、ご教授宜しくお願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-12-15 16:57
MSDNにそこらへんの説明をしたのがあったような。
(マネージドアンマネージド相互運たらってのだったかな)
(追記)
これだぁ。↓
http://msdn2.microsoft.com/ja-jp/library/sd10k43k(VS.80).aspx


引用:
1)VC6のDLL関数内で「HANDLE*」型を使用している


C#ではポインタ型は全て System.IntPtr で扱うとよいでしょう。
ただ、これを使っている関数で HANDLE の値を設定させるのであるという場合

ref System.IntPtr h

のような指定になるかも。

引用:
2)VC6のDLL関数内で「const char*」型を使用している


これは、String型でCharSetをAnsiで指定すればいいでしょう。
ここら辺は、C#でWinAPIの〜〜Aを使っているような例を参考にされるとよいでしょう。

引用:
3)C#ではC++の「*」を「out」と表記すれば宜しいのでしょうか?


ケースバイケースのような気がします、
ref を指定すればいいのか out でいいのかそれとも IntPtrの値渡しでいいのかは
関数の使い方がわからないのでなんともいえないでしょう。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-12-15 17:10 ]
ひろ@質問です。
会議室デビュー日: 2006/12/04
投稿数: 7
投稿日時: 2007-01-09 18:33
教えて頂いた方法で解決しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)