すいません。
教えてください
制作環境はBorlandCBuilder5です。
DLLの中身
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*
lpReserved)
{
return 1;
}
__declspec (dllexport) int sum(int,int);
int addition(int a,int b)
{
return (a+b);
}
ソフトの中身
HINSTANCE h;
typedef int (*func)(int,int);
func lpfn;
h=LoadLibrary(Project1.dll);
lpfn=(func)GetProcAddress(h,sum);
Label1->Caption=lpfn(1,2);
FreeLibrary(h);
期待しているのは、
Label1に3が表示されること。
しかし上手くいきません。
GetProcAddressが上手くいってないみたいです。
何故なのか教えてください。
> GetProcAddressが上手くいってないみたいです。
みたいって、、、
戻り値やGetLastErrorで確認してみましたか?
HINSTANCE h;
typedef int (*func)(int,int);
func lpfn;
DWORD d;
h=LoadLibrary(Project1.dll);
if ( h )
{
lpfn=(func)GetProcAddress(h,sum);
if ( lpfn )
{
Label1->Caption=lpfn(1,2);
d = GetLastError();
}
FreeLibrary(h);
}
として、確認できるところは確認してみてください。
また、自作DLLということなので、
類似スレ
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200602/06020009.txt
をさんこうに、DLL内でsumときちんと関数があるか確認してみてください。
ちなにみ、BCCにおけるdumpbin.exeと同等の機能をもつツールは
tdump.exe です。
流石に使い方の詳細まではわからないので調べてください。
(というか調べるのめんどくさい。DLLを指定するだけでも確認は出来るので。)
> 制作環境はBorlandCBuilder5です。
ここは、VCを前提にした掲示板ですので、DLL作成時にどうやってDEFファイルを
関連付けるのか等、コンパイラに依存した質問をなさると、もしかしたら回等が
得られないときがあるかもしれませんのでご注意を。
「LoadLibrary」使った方法がうまくいかないみたいですが、
ライブラリーをリンクする方法は、使えませんか?
まず、必ずうまくいく方法を探ってそれから「LoadLibrary使った方法」
に戻るのもいいんじゃないですか。
レス有り難うございます。
DWORD d;
d=GetLastError();
で行くと、d=127になっています。
また無理矢理走らせると、書き込み違反が起きてしまいます。
.DEFファイルというのを詳しく知らないんですが、インポートするときには絶対に必要
なんでしょうか?
インポートライブラリーをリンクするのは上手くいくんですが。動的アクセスが未だ上
手くいきません。
sum
という関数で宣言しても、エクスポート時に?sum@xxみたいな名前になってしまいます。
だから、tdump.exe等で、DLLで宣言されてる関数名を確認してほしかったのですが。
DEFファイルを使いたくないのであれば、
> lpfn=(func)GetProcAddress(h,sum);
をtdump.exeで確認した関数名にしてあげればよいです。
lpfn=(func)GetProcAddress(h,sum@xx);
みたいに。
以上
> 類似スレ
> http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200602/06020009.txt
に書いてあることを 再 度 かきました。
# 何のためのリンクでしょうか?
すげーレス早ぇー
いやあ、ダンプすれば分かりました。
じつは、.defファイルの使い方がいまいち分からなかったんですよ。
出来れば少し教えて下さい。
普通にリンクしたらいいのですか?
おお、分かりました。
有り難うございました。