C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: C++で作成したdll中のクラスの読込みは可能でしょうか?


(過去ログ 55 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■31260 / inTopicNo.1)  C++で作成したdll中のクラスの読込みは可能でしょうか?
  
□投稿者/ tamaboyo (14回)-(2009/01/19(Mon) 15:01:47)

分類:[C#] 

tamaboyoです。
宜しくお願いします。

C#からVC++で作成したDLLを呼び出してファイルからデータの読み込みを行おうとしています。
#ファイルアクセスはDLLが行うため、C#側からはデータだけもらう形になります。
DLLには、ファイルアクセス用クラスがあり、関数を呼ぶと、このクラスのポインタが返値として戻ってくるようになっています。
データの読み込みはクラスにアクセスして値を取得します。

・関数を呼んだ際の戻り値をクラス型の変数で受取ことは可能でしょうか?
・クラス型の変数を宣言するために、dllからクラス情報を読み込むことは可能でしょうか?
・dllのライブラリをプロジェクトで指定しなくてはいけないのでしょうか?

dllはVS2008で作成されていますが、C#はVS2005で作成しているため、
dllのプロジェクトを追加することはできませんでした。

環境はVS2005 C#です。
宜しくお願いします。
引用返信 編集キー/
■31262 / inTopicNo.2)  Re[1]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ aetos (73回)-(2009/01/19(Mon) 15:07:39)
No31260 (tamaboyo さん) に返信
> C#からVC++で作成したDLLを呼び出してファイルからデータの読み込みを行おうとしています。
> #ファイルアクセスはDLLが行うため、C#側からはデータだけもらう形になります。
> DLLには、ファイルアクセス用クラスがあり、関数を呼ぶと、このクラスのポインタが返値として戻ってくるようになっています。
> データの読み込みはクラスにアクセスして値を取得します。
>
> ・関数を呼んだ際の戻り値をクラス型の変数で受取ことは可能でしょうか?
> ・クラス型の変数を宣言するために、dllからクラス情報を読み込むことは可能でしょうか?
> ・dllのライブラリをプロジェクトで指定しなくてはいけないのでしょうか?

DLL 側が C++/CLI で作られたクラスなら可能ですが、そうでない場合は不可能です。
純 C++ とか MFC のクラスの場合、クラスポインタを直接受け取ることはできない(受け取ってもそれ経由でアクセスできないし、開放もできない)ので、メンバの個々の値をそれぞれ受け取るようにする等の方策が必要でしょう。
C++/CLI の DLL なら、C# のプロジェクトに参照を追加できるはずです。
引用返信 編集キー/
■31263 / inTopicNo.3)  Re[2]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ tamaboyo (16回)-(2009/01/19(Mon) 15:26:11)
No31262 (aetos さん) に返信

aetos さんありがとうございます。

> ■No31260 (tamaboyo さん) に返信
>>C#からVC++で作成したDLLを呼び出してファイルからデータの読み込みを行おうとしています。
>>#ファイルアクセスはDLLが行うため、C#側からはデータだけもらう形になります。
>>DLLには、ファイルアクセス用クラスがあり、関数を呼ぶと、このクラスのポインタが返値として戻ってくるようになっています。
>>データの読み込みはクラスにアクセスして値を取得します。
>>
>>・関数を呼んだ際の戻り値をクラス型の変数で受取ことは可能でしょうか?
>>・クラス型の変数を宣言するために、dllからクラス情報を読み込むことは可能でしょうか?
>>・dllのライブラリをプロジェクトで指定しなくてはいけないのでしょうか?
>
> DLL 側が C++/CLI で作られたクラスなら可能ですが、そうでない場合は不可能です。
> 純 C++ とか MFC のクラスの場合、クラスポインタを直接受け取ることはできない(受け取ってもそれ経由でアクセスできないし、開放もできない)ので、メンバの個々の値をそれぞれ受け取るようにする等の方策が必要でしょう。
> C++/CLI の DLL なら、C# のプロジェクトに参照を追加できるはずです。

DLLの中身は、オリジナルです(クラスの中身もオリジナルです)。
ただ、MFCを使って作っている・・・と聞いたような覚えがあります。
ということは、ムリなのでしょうか・・・

> C++/CLI の DLL なら、C# のプロジェクトに参照を追加できるはずです。
もし、C++/CLIで作成されている場合は、DLL全体を追加できるということでしょうか?
それとも、DLLの中のクラスの参照のみ追加できるということでしょうか?

宜しくお願いします。

引用返信 編集キー/
■31284 / inTopicNo.4)  Re[3]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ Azulean (268回)-(2009/01/20(Tue) 00:35:20)
> DLLの中身は、オリジナルです(クラスの中身もオリジナルです)。
> ただ、MFCを使って作っている・・・と聞いたような覚えがあります。
> ということは、ムリなのでしょうか・・・
C#から直接使うことはできません。
C++/CLIを使ってラッピング(覆い隠す)ことで間接的に使用するテクニックはあります。

>>C++/CLI の DLL なら、C# のプロジェクトに参照を追加できるはずです。
> もし、C++/CLIで作成されている場合は、DLL全体を追加できるということでしょうか?
> それとも、DLLの中のクラスの参照のみ追加できるということでしょうか?
DLL全体というのがよく分かりませんが、C++/CLIで作ったDLLであっても、マネージクラスとして作られていないクラスはC#からは見えませんし、使えません。

ネイティブのクラス(MFC使用でも良い)をメンバーに持つ、マネージクラスをC++/CLIで作って、そのマネージクラスをC#で使うようにする形であれば、要件を満たせるかと思います。

http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_03.html
引用返信 編集キー/
■31307 / inTopicNo.5)  Re[4]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ tamaboyo (17回)-(2009/01/20(Tue) 13:16:59)
No31284 (Azulean さん) に返信

Azulean さん、ありがとうございます。

>>DLLの中身は、オリジナルです(クラスの中身もオリジナルです)。
>>ただ、MFCを使って作っている・・・と聞いたような覚えがあります。
>>ということは、ムリなのでしょうか・・・
> C#から直接使うことはできません。
> C++/CLIを使ってラッピング(覆い隠す)ことで間接的に使用するテクニックはあります。

ということは、DLLを作りなおしてもらえば良いということでしょうか。


> >>C++/CLI の DLL なら、C# のプロジェクトに参照を追加できるはずです。
>>もし、C++/CLIで作成されている場合は、DLL全体を追加できるということでしょうか?
>>それとも、DLLの中のクラスの参照のみ追加できるということでしょうか?
> DLL全体というのがよく分かりませんが、C++/CLIで作ったDLLであっても、マネージクラスとして作られていないクラスはC#からは見えませんし、使えません。
>
> ネイティブのクラス(MFC使用でも良い)をメンバーに持つ、マネージクラスをC++/CLIで作って、そのマネージクラスをC#で使うようにする形であれば、要件を満たせるかと思います。
>
> http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_03.html

なるほど、そういう方法があるのですね。
DLL作成者に提案してみます。

ありがとうございました。
引用返信 編集キー/
■31310 / inTopicNo.6)  Re[5]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ tamaboyo (18回)-(2009/01/20(Tue) 13:40:31)
tamaboyoです。

DLL担当者と検討の結果、時間との兼ね合いがあるので、一旦保留ということになりました。
また再開した場合には、宜しくお願いします。
解決済み
引用返信 編集キー/
■31313 / inTopicNo.7)  Re[6]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ επιστημη (1543回)-(2009/01/20(Tue) 14:14:14)
επιστημη さんの Web サイト
> DLL担当者と検討の結果、時間との兼ね合いがあるので、一旦保留ということになりました。

時間との兼ね合いがあるからこそ、一番簡単な「C++/CLIのカワでくるむ」
ってことにはなりませんでしたか。

ならばどんな策が取られたのか、後学のため是非ともうかがいたく。

解決済み
引用返信 編集キー/
■31325 / inTopicNo.8)  Re[7]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ tamaboyo (20回)-(2009/01/20(Tue) 15:02:18)
No31313 (επιστημη さん) に返信

επιστημη さん、こんにちは。

>>DLL担当者と検討の結果、時間との兼ね合いがあるので、一旦保留ということになりました。
>
> 時間との兼ね合いがあるからこそ、一番簡単な「C++/CLIのカワでくるむ」
> ってことにはなりませんでしたか。
>
> ならばどんな策が取られたのか、後学のため是非ともうかがいたく。

まず、開発環境をそろえたほうが良いのではないかという話になりました。
#DLL:VS2008 VC++
#C#: VS2005
そもそもは、DLLをプロジェクト毎組み込む予定だったのですが、環境が異なるため組み込めなかったのです。

また、のちにDebugもしやすいので環境統一、ということなのですが、
今すぐ2005を2008に変更、ということができないので、
一区切り付いてから環境を統一し、それから、ということになりました。
#それまでにDLLも変更がかかるそうです。

何の解決もできていないのですが、
再開までトピックを途中で放置したままにして置くのもどうかと思いましたので、
一度終了させていただこうと思いました。
とても中途半端な状態での終了で申し訳ありません。
また、このような状態なので、何の策もとっていません。
取りかかりの見込みが甘い&勉強不足だったと反省しているところです。。。
解決済み
引用返信 編集キー/
■31330 / inTopicNo.9)  Re[8]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ επιστημη (1547回)-(2009/01/20(Tue) 15:17:01)
επιστημη さんの Web サイト
> まず、開発環境をそろえたほうが良いのではないかという話になりました。

そりゃそーだ。なにも進んで茨の途を歩くこたーない。

> 今すぐ2005を2008に変更、ということができないので、
> 一区切り付いてから環境を統一し、それから、ということになりました。
> #それまでにDLLも変更がかかるそうです。

そじゃなくてぇ...

まがりなりにも/いっぺんでも C++DLL と C#EXE とをちゃんと繋ぐってゆー
検証実装をやってからじゃないと両者とも怖くて動けないんじゃない? てことなんですが。

# で、それには C++/CLI に仲人やってもらうのがいっちゃん楽でない? とゆーてるんですが。

解決済み
引用返信 編集キー/
■31352 / inTopicNo.10)  Re[9]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ tamaboyo (22回)-(2009/01/20(Tue) 17:04:48)
No31330 (επιστημη さん) に返信
>>今すぐ2005を2008に変更、ということができないので、
>>一区切り付いてから環境を統一し、それから、ということになりました。
>>#それまでにDLLも変更がかかるそうです。
>
> そじゃなくてぇ...
>
> まがりなりにも/いっぺんでも C++DLL と C#EXE とをちゃんと繋ぐってゆー
> 検証実装をやってからじゃないと両者とも怖くて動けないんじゃない? てことなんですが。
>
> # で、それには C++/CLI に仲人やってもらうのがいっちゃん楽でない? とゆーてるんですが。

仲人さんを立てる時間が・・・

読み込み機能自体はC#でも一通り出来ているのです。
もともとDLLはC++のアプリで使うように作られたもので、そこではそのまま動いているそうです。
ただ、アプリは違うとはいえ、同じことをするのであれば、C#でもDLLが使えれば
この先のメンテが楽だよね、というところから始まった話です。
ただ、ほかにも手をつけなければならないところが満載なので、
そちらを先にしてから環境を統一し、その後再度考え直そう、という結果になりました。
引用返信 編集キー/
■31353 / inTopicNo.11)  Re[10]: C++で作成したdll中のクラスの読込みは可能でしょうか?
□投稿者/ επιστημη (1553回)-(2009/01/20(Tue) 17:12:42)
επιστημη さんの Web サイト
> 読み込み機能自体はC#でも一通り出来ているのです。
> もともとDLLはC++のアプリで使うように作られたもので、そこではそのまま動いているそうです。

あー納得。C#版があるわけね。

> ただ、アプリは違うとはいえ、同じことをするのであれば、C#でもDLLが使えれば

ですねぇ、同じもんを違う言語で二重開発すんのはねぇ。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -