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

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

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

Re[2]: VB6とC#間で参照渡しでやりとりする方法


(過去ログ 162 を表示中)

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

■93691 / inTopicNo.1)  VB6とC#間で参照渡しでやりとりする方法
  
□投稿者/ 凡人 (1回)-(2020/01/12(Sun) 16:38:06)

分類:[C#] 

2020/01/12(Sun) 21:15:17 編集(投稿者)

VB6で作成したActiveX DLLをC#からコールしたいです。

VB6上ではEXEアプリケーションとActiveX DLL間でコール
およびデータのやりとりは出来ています。

C#はVisual C# 2008 Express Editionを使用しています。
OSはWindows7 Professional 64bit です。

VB6 ActiveX DLLの記述(一部) ///////////////////////////////

VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "Class1"
Attribute VB_GlobalNameSpace = True
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True

Public Function DLL_CALL_TEST(ByRef bBuf() As Byte, ByVal lSize As Long) As Boolean

Dim lw As Long

'戻り値初期化
DLL_CALL_TEST = False

〜省略〜

End Function


/////////////////////////////////////////////////////////////////


このDLL_CALL_TEST()関数をC#側から参照の追加をし、コールしたいのですが、

FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);

byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, bs.Length);

Array a = Array.CreateInstance(typeof(byte), fs.Length);
DLL_CALL_TEST.Class1Class call_test_dll = new DLL_CALL_TEST.Class1Class();
call_test_dll.DLL_CALL_TEST(ref a, (int)fs.Length);

fs.Close();

〜省略〜

と記述し、実行すると
COMExceptionはハンドルされませんでした。
CLSID {79342F1A-18ED-4E63-BC1B-60B9999F55E2} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80040154。

となってしまいます。
色々とネット上を調べましたが解決できていません。

どなたか、解決方法をご教授していただけないでしょうか?

よろしくお願いします。


引用返信 編集キー/
■93692 / inTopicNo.2)  Re[1]: VB6とC#間で参照渡しでやりとりする方法
□投稿者/ Hongliang (949回)-(2020/01/12(Sun) 21:17:55)
80040154は、クラスが登録されていない、ですかね。
DLLのレジストリへの登録は行っているとすると、C#のアプリがx64プロセスとして実行されている可能性が考えられます。
VS上部のドロップダウンにAny CPUとなっているのがあれば、それをx86に切り替えてください。
もしx86が選択できない場合、メニューのプロジェクト辺りから構成マネージャを開いて、プロジェクトがx86でビルドできるように変更してみてください。
引用返信 編集キー/
■93693 / inTopicNo.3)  Re[2]: VB6とC#間で参照渡しでやりとりする方法
□投稿者/ 凡人 (2回)-(2020/01/12(Sun) 21:50:41)
2020/01/12(Sun) 21:51:33 編集(投稿者)

No93692 (Hongliang さん) に返信


「VisualStudio2008 Expressでx86環境用のビルドをする設定」
https://fofofofo.hatenadiary.org/entry/20090819/1250696028

を参考に、x86に切り替えしましたら、解消できました。

有難うございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -