DLLをうまくロードできません – プログラミング – Home

DLLをうまくロードできません
 
通知
すべてクリア

[解決済] DLLをうまくロードできません


DLL?
 DLL?
(@DLL?)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

すいません。
教えてください
制作環境は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が上手くいってないみたいです。
何故なのか教えてください。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 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ときちんと関数があるか確認してみてください。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ちなにみ、BCCにおけるdumpbin.exeと同等の機能をもつツールは
tdump.exe です。

流石に使い方の詳細まではわからないので調べてください。
(というか調べるのめんどくさい。DLLを指定するだけでも確認は出来るので。)

> 制作環境はBorlandCBuilder5です。
ここは、VCを前提にした掲示板ですので、DLL作成時にどうやってDEFファイルを
関連付けるのか等、コンパイラに依存した質問をなさると、もしかしたら回等が
得られないときがあるかもしれませんのでご注意を。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

 「LoadLibrary」使った方法がうまくいかないみたいですが、
ライブラリーをリンクする方法は、使えませんか?
 まず、必ずうまくいく方法を探ってそれから「LoadLibrary使った方法」
に戻るのもいいんじゃないですか。


返信引用
DLL?
 DLL?
(@DLL?)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

レス有り難うございます。
DWORD d;
d=GetLastError();
で行くと、d=127になっています。
また無理矢理走らせると、書き込み違反が起きてしまいます。
.DEFファイルというのを詳しく知らないんですが、インポートするときには絶対に必要
なんでしょうか?
インポートライブラリーをリンクするのは上手くいくんですが。動的アクセスが未だ上
手くいきません。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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
に書いてあることを 再 度 かきました。
# 何のためのリンクでしょうか?


返信引用
DLL?
 DLL?
(@DLL?)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

すげーレス早ぇー
いやあ、ダンプすれば分かりました。
じつは、.defファイルの使い方がいまいち分からなかったんですよ。
出来れば少し教えて下さい。
普通にリンクしたらいいのですか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467

返信引用
DLL?
 DLL?
(@DLL?)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

おお、分かりました。
有り難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました