C#アプリから呼ばれるActiveXをVC6.0で製作しています。
ActiveXの内容としては画像を表示し、またその内容をアプリに返すというものです。
画像の表示等の部分は出来上がっているのですが、その内容をアプリに返す部分が出来て
いなくて困っています。
ActiveX(VC6.0)側:
画像データはCBitmapで保有
アプリ(C#)側:
画像データをBitmapで受け取る
Bitmap bm = ActiveX.xxx();
上記の形で受け取りたいのですが、VC側からどのようにリターンしたら良いのか分からず
に困っています。
オートメーションで選べる戻り値も限られていますし。
上記の形で受け取らなければいけないのは仕様で決まっていて変えられません。
というのもActiveX部分のみの入れ替えで現状のActiveX(製品版でソース非公開)では上
記の形で受け取れているからです。
ここ数日色々と調べているのですが、進展がなくて困っています。
何か情報をお持ちでしたら些細な事でも結構ですので教えて頂けないでしょうか。
よろしくお願い致します。
CBitmap ってのは何ですか? MFC の CBitmap でしょうか?
ActiveX というのは、(今まさにやろうとしていることでしょうが)呼び出し元の言語を
問いません。
C でも C++ でも C# でも VB でも呼び出すことができます。基本的には。
であるからには、戻り値と引数は、それらすべての言語で使えるデータ型でなければなり
ません。
MFC の CBitmap を ActiveX が返すというのが信じがたいことですが、仮にそうだとした
ら、それを C# で受け取るのは不可能です。
その製品の ActiveX ってのはドコの、なんと言う製品なのでしょうか?
シャノンさん、早速ありがとうございます。
CBitmapはお察しの通りMFCのCBitmapで、ActiveX内で画像を表示する為に使っています。
おっしゃる通り、それをそのままリターンできるとは思っていないのですが、現状では上
記の様にBitmapで受け取っています。
C#側のBitmapというのはCBitmapではなく、Bitmapです。
そのままヘルプで見ると
.NET Framework クラス ライブラリ
Bitmap メンバ
というのが出てきます。
現状ではこれで受け取っている形になっています。
私は.NETやC#が全く分からないので、このあたりがイマイチ分からないのですが。。。
製品名ですが、すみませんが守秘義務がありますので公表する事ができません。
現状使っているActiveXに守秘義務があるのではないのですが、C#のアプリ側に守秘義務
があるので。
戻り値をIPictureDisp型にすればC#でも受け取り可能です。
VC++の方に回答していますので、そちらを参照ください。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200801/08010015.txt
Kerryさん、回答ありがとうございます。
VC++掲示板にて書き込ませて頂きました。
> 現状では上記の様にBitmapで受け取っています。
CBitmap と Bitmap は全然違うものなので、受け取れないと思いますが。
> 戻り値をIPictureDisp型にすればC#でも受け取り可能です。
あぁ! 勘違いしてました。
今使っている製品の ActiveX が CBitmap を返しているわけではないのですね。
ちょっと考えればわかることでした。
シャノンさん
Bitmapが何か良く分かっていないのでもしかしたらそのままいけるかな?とも思っていた
のですが、無理なのですね。
製品版のソースは非開示なので何を返しているかは分からないのですが、受け取りは
Bitmapです。
私の作ったActiveXが画像表示にCBitmapを使っているのでその画像を返そうとしています。
VC++側での質問でこの件については解決致しました。
ありがとうございました。