- PR -

C#からVC++6.0のライブラリを呼び出す方法(.NET 2005)

投稿者投稿内容
ふにゅ
会議室デビュー日: 2007/01/10
投稿数: 10
投稿日時: 2007-01-10 13:09
いつもお世話になっております。


Visual Studio.NET 2005のC#で開発をしています。
Visual C++ 6.0で作られた関数を使用したいです。

ソリューションの追加でC++のプロジェクトを追加したのですが、
参照設定ではねられてしまいます。
他にすべきことがあるのでしょうか?

アンマネージドでも、#pragma unmanagedを記入すれば、そのまま使用できる
という認識なのですが、これは間違っているでしょうか?
マネージドにラップしたDLLにしなければ、使用できないのでしょうか?

こちらの掲示板で検索をすると、いくつか参考になるスレッドが
あったのですが、実際にどうすればよいのが、分からなくて質問しました。
よろしくお願いします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-01-10 13:17
ネイティブな DLL を C# から参照することはできません。
DllImport で関数一つ一つ呼び出すか、C++/CLI を使ってラップするかなどしなければなりません。
#pragma unmanaged は C++/CLI で使われるディレクティブです。
// いっそ全部 C++/CLI で作ってしまっちゃうのは……
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-10 13:17
状態がよく変わりませんけど。
最終的なアプリはC#で作るのでしょうか?

>Visual C++ 6.0で作られた関数
とはいったいどんなものでしょうか?
クラス群とか?

レガシーDLLであれば、C#からでもDllImportで使えますが。
ふにゅ
会議室デビュー日: 2007/01/10
投稿数: 10
投稿日時: 2007-01-10 14:23
返信ありがとうございます。

最終的にはC#でアプリを作ります。
そのアプリで、C++6.0で作られたプロジェクト内の関数を呼び出したいです。

ソリューションの追加でC++6.0のプロジェクトを追加し、参照設定をしようとすると、
はじかれます。

ネイティブだとそのまま使えないんですね。。
C++/CLIに書き換えていこうかと思います。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-10 14:33
引用:

ふにゅさんの書き込み (2007-01-10 14:23) より:

ソリューションの追加でC++6.0のプロジェクトを追加し、参照設定をしようとすると、
はじかれます。


当然かと。(VC6のプロジェクトをVS2005には入れれないかと。)
そのプロジェクトでは何も作っていないのでしょうか?たとえばDLLとかLibとか。
出来ているのであればいろんな方法があるのですが、
だたソースコードしかないの関数を使いたいとかそういうことであれば、
VC6でDLLを作るか、VS2005のVCでDLLを作るもしくはC++/CLIでクラスライブラリを作る
かしないと C# で使うことは不可能です。
ふにゅ
会議室デビュー日: 2007/01/10
投稿数: 10
投稿日時: 2007-01-10 16:29
丁寧に教えて下さってありがとうございます。

VC++6.0のプロジェクトでは、DLLもLibも作ってありません。
試しにC++/CLIのサンプルコードをC#から呼び出そうとしたら、うまくいきましたので、
C++6.0のコードをC++/CLIに書き換えをやっていこうと思います。

C++もC#も初心者なので、分からない事だらけですいません。。。
ありがとうございました。
ふにゅ
会議室デビュー日: 2007/01/10
投稿数: 10
投稿日時: 2007-01-17 15:21
方針が変わりまして、C++/CLIに書き換えるのではなく、
VC++6.0でDLLを作成し、それをC#側から呼び出す事になりました。

そこで質問があります。
Visual Studio C++6.0の件のプロジェクトで現在ビルドしようとすると、
.exeが作成されます。
簡単に.dllを作成する方法はありませんか?
新規作成からやり直すしかないのでしょうか?
よろしくお願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-17 15:35
引用:

ふにゅさんの書き込み (2007-01-17 15:21) より:
簡単に.dllを作成する方法はありませんか?
新規作成からやり直すしかないのでしょうか?


ないです。
というか、exeがほかのプログラムから使うことを考慮して作られているのか?
間違いなくそうではないでしょう。

最初から作り直してください。
その際にC#とやり取りする上で、どんな情報をC++にわたすのか、
またその逆にC++からC#にどんな情報を渡すのかを考慮して
インタフェース(C++⇔C#をやり取りする関数宣言等)を考え直す必要があります。

まぁ、C++のソースがあれば一部流用は聞くと思いますが。

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