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

わんくま同盟

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

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

ツリー一括表示

VB6とC#間で参照渡しでやりとりする方法 /凡人 (20/01/12(Sun) 16:38) #93691
Re[1]: VB6とC#間で参照渡しでやりとりする方法 /Hongliang (20/01/12(Sun) 21:17) #93692
  └ Re[2]: VB6とC#間で参照渡しでやりとりする方法 /凡人 (20/01/12(Sun) 21:50) #93693 解決済み


親記事 / ▼[ 93692 ]
■93691 / 親階層)  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。

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

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

よろしくお願いします。


[ □ Tree ] 返信 編集キー/

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

▲[ 93692 ] / 返信無し
■93693 / 2階層)  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に切り替えしましたら、解消できました。

有難うございました。
解決済み
[ 親 93691 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -