- PR -

ActiveXからDLLの呼出しについて

1
投稿者投稿内容
ms
会議室デビュー日: 2003/05/29
投稿数: 10
投稿日時: 2004-08-19 20:13
VBで作成したEXEからVC++で作成したDLLを呼出して実行していました。
それと同じ関数をActiveX(EXE)から呼出すと"実行時エラー'-214717851(80010105)'"
のメッセージが表示され、エラーとなってしまいます。

回避方法が分かる方がおられたら宜しくお願いいたします。

バージョンは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)

宜しくお願いいたします。
ms
会議室デビュー日: 2003/05/29
投稿数: 10
投稿日時: 2004-08-19 20:24
自己レスです。
実行時のエラーメッセージは
"実行時エラー'-214717851(80010105)'" ではなく
"実行時エラー'-2147352560(80020010)'" でした。

宜しくお願いします。
ms
会議室デビュー日: 2003/05/29
投稿数: 10
投稿日時: 2004-08-21 16:26
自己レスです。
以下のように宣言を変更することでうまくいきました。

VB側宣言
Private Declare Function TestFunc Lib "TestLib" Alias "_TestFunc@16" (ByVal 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では必要になるのは
なぜなんでしょうね。(わかりにくいな〜)

1

スキルアップ/キャリアアップ(JOB@IT)