こんにちは、みなさん。
私は今日、ExcelとVBAでいくつかのDLLをロードして、どのような問題が発生する可能性があるかを確認していました。
自分で作成した非常にシンプルなDLLを試してみました。理由がわからないのですが、実行しようとすると「指定されたDLL関数が見つかりません」というメッセージが表示され続けます。
これが私のワークブックにあるものです...
Private Declare Sub MouseClick Lib "\location\of\myDLL" Alias "_MouseClick" ()
'I have also tried...
'Private Declare Sub MouseClick Lib "\location\of\myDLL" ()
Sub Test()
MouseClick
End Sub
これがDLLでの私の単純な関数宣言です...
extern "C"
{
void MouseClick();
...
}
コンパイル時に関数の名前が壊れているのではないかと思ったので、「nm」を使って確認しました...
$ nm myDLL.dll | grep MouseClick
6df81254 T _MouseClick
$ nm -C myDLL.dll | grep MouseClick
6df81254 T MouseClick
わかりません...両方を使って動作させました。また、gdbを使用してMouseClick関数を呼び出す関数を分解しました...
$ gdb myDll.dll
(gdb) disass testFunction
Dump of assembler code for function testFunction:
0x6df81327 <+0>: push %ebp
0x6df81328 <+1>: mov %esp,%ebp
...
0x6df81361 <+58>: call 0x6df81a44 <SetCursorPos@8>
0x6df81366 <+63>: sub $0x8,%esp
-> 0x6df81369 <+66>: call 0x6df81254 <MouseClick>
0x6df8136e <+71>: jmp 0x6df8138a <testFunction+99>
...
0x6df8138a <+99>: leave
0x6df8138b <+100>: ret
End of assembler dump.
ここでも、この関数を「MouseClick」と呼びます。
私はこれをすべて間違った方法で行っているかもしれませんが、gdbとnmの両方が「クリーンな」関数名を示している理由はわかりませんが、Excelは私が想定したどちらの関数名でも機能しません。しばらくの間、dllをVBA subで動作させることができましたが、ドキュメントを変更したため、動作しなくなりました。
以前にこれを行ったことがある人は、これについて正しい方向に私を向けるのに十分親切でしょうか?Excelで関数に名前を付ける必要がありますか?nmがマングルされていない関数名を表示しているのはなぜですか?私もこれを正しい方法で行っていますか?
よろしくお願いします!