- - PR -
C#からVC++6.0のライブラリを呼び出す方法(.NET 2005)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-10 13:09
いつもお世話になっております。
Visual Studio.NET 2005のC#で開発をしています。 Visual C++ 6.0で作られた関数を使用したいです。 ソリューションの追加でC++のプロジェクトを追加したのですが、 参照設定ではねられてしまいます。 他にすべきことがあるのでしょうか? アンマネージドでも、#pragma unmanagedを記入すれば、そのまま使用できる という認識なのですが、これは間違っているでしょうか? マネージドにラップしたDLLにしなければ、使用できないのでしょうか? こちらの掲示板で検索をすると、いくつか参考になるスレッドが あったのですが、実際にどうすればよいのが、分からなくて質問しました。 よろしくお願いします。 | ||||
|
投稿日時: 2007-01-10 13:17
ネイティブな DLL を C# から参照することはできません。
DllImport で関数一つ一つ呼び出すか、C++/CLI を使ってラップするかなどしなければなりません。 #pragma unmanaged は C++/CLI で使われるディレクティブです。 // いっそ全部 C++/CLI で作ってしまっちゃうのは…… | ||||
|
投稿日時: 2007-01-10 13:17
状態がよく変わりませんけど。
最終的なアプリはC#で作るのでしょうか? >Visual C++ 6.0で作られた関数 とはいったいどんなものでしょうか? クラス群とか? レガシーDLLであれば、C#からでもDllImportで使えますが。 | ||||
|
投稿日時: 2007-01-10 14:23
返信ありがとうございます。
最終的にはC#でアプリを作ります。 そのアプリで、C++6.0で作られたプロジェクト内の関数を呼び出したいです。 ソリューションの追加でC++6.0のプロジェクトを追加し、参照設定をしようとすると、 はじかれます。 ネイティブだとそのまま使えないんですね。。 C++/CLIに書き換えていこうかと思います。 | ||||
|
投稿日時: 2007-01-10 14:33
当然かと。(VC6のプロジェクトをVS2005には入れれないかと。) そのプロジェクトでは何も作っていないのでしょうか?たとえばDLLとかLibとか。 出来ているのであればいろんな方法があるのですが、 だたソースコードしかないの関数を使いたいとかそういうことであれば、 VC6でDLLを作るか、VS2005のVCでDLLを作るもしくはC++/CLIでクラスライブラリを作る かしないと C# で使うことは不可能です。 | ||||
|
投稿日時: 2007-01-10 16:29
丁寧に教えて下さってありがとうございます。
VC++6.0のプロジェクトでは、DLLもLibも作ってありません。 試しにC++/CLIのサンプルコードをC#から呼び出そうとしたら、うまくいきましたので、 C++6.0のコードをC++/CLIに書き換えをやっていこうと思います。 C++もC#も初心者なので、分からない事だらけですいません。。。 ありがとうございました。 | ||||
|
投稿日時: 2007-01-17 15:21
方針が変わりまして、C++/CLIに書き換えるのではなく、
VC++6.0でDLLを作成し、それをC#側から呼び出す事になりました。 そこで質問があります。 Visual Studio C++6.0の件のプロジェクトで現在ビルドしようとすると、 .exeが作成されます。 簡単に.dllを作成する方法はありませんか? 新規作成からやり直すしかないのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2007-01-17 15:35
ないです。 というか、exeがほかのプログラムから使うことを考慮して作られているのか? 間違いなくそうではないでしょう。 最初から作り直してください。 その際にC#とやり取りする上で、どんな情報をC++にわたすのか、 またその逆にC++からC#にどんな情報を渡すのかを考慮して インタフェース(C++⇔C#をやり取りする関数宣言等)を考え直す必要があります。 まぁ、C++のソースがあれば一部流用は聞くと思いますが。 |