[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/08/19(Thu) 17:55
投稿者名:まー
URL :
タイトル:
ActiveXからDLLの呼出しについて
VBで作成したEXEからVC++で作成したDLLを呼出して実行していました。
それと同じ関数をActiveX(EXE)から呼出すと"実行時エラー'-214717851(80010105)'"
のメッセージが表示され、エラーとなってしまいます。
通常のEXEもActiveXも同じコードで記述しています。
回避方法が分かる方がおられたら宜しくお願いいたします。

バージョンはVB6とVC6です。
環境はWindows XPです。

VB側のソース
宣言部
Private Declare Function TestFunc Lib "TestLib" (ByVal param1 As String, ByVal param1 As Long, ByVal param1 As String, ByVal param1 As String) As Long

ソース部
Dim lRet As Long
Dim param1 As String
Dim param2 As Long  
Dim param3 As String
Dim param4 As String

lRet = TestFunc(param1, param2, param3, param4)


C側のソース
extern "C" __declspec(dllexport) long TestFunc(char *param1, long param2,char *param3,char *param4)

宜しくお願いいたします。

投稿時間:2004/08/21(Sat) 16:25
投稿者名:まー
URL :
タイトル:
Re: ActiveXからDLLの呼出しについて
自己レスです。
ついに解決しました!!
以下のように宣言を変更することでうまくいきました。

VB側宣言
Private Declare Function TestFunc Lib "TestLib" Alias "_TestFunc@16" (ByV
al param1 As String, ByVal param1 As Long, ByVal param1 As String, ByVal param1 As String) As
Long

VC側宣言
extern "C" __declspec(dllexport) long __stdcall  TestFunc(char *param1, long param2
,char *param3,char *param4)

MSDNに__stdcallの使用方法がのっていたのですが、@以降の設定方法が
意味不明でした。
引数のバイト数を総計すればよかったんですね。
しかし、通常EXEではAliasは必要なくてActiveXでは必要になるのは
なぜなんでしょうね。(わかりにくいな〜)