dll作成時のエラー – プログラミング – Home

通知
すべてクリア

[解決済] dll作成時のエラー

固定ページ 1 / 2

puel
 puel
(@puel)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

c++初心者です。
ユーザーからもらったaaa.dllにある関数Calc_UL(struct型)をコールするbbb.dllを作成しよ
うしています。
コンパイルはとおるのですが、 dllのビルドがうまくいきません。ユーザーからはaaa.dllと
aaa.libとaaa.hだけもらっており、aaa.libにはリンク設定をしています。

bbb.obj : error LNK2001: 外部シンボル "int __stdcall Calc_UL(struct ULData *)
(?Calc_UL@@YGHPAUULData@@@Z) は未解決です
Debug/bbb.dll : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

aaa.dllを指定するところが特に無いのですが、どこかで指定しないといけないのでしょう
か?
よろしくお願いします。


引用未解決
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

aaa.hをインクルードしていればビルド出来そうな気がするんですが...。
やった事がないので、確かな事は言えませんが、他にやらなければいけない事があるんでしょう
か?


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

aaa.dllとbbb.dllのマングリングルールを同一にしていないのではないでしょうか。
双方が同じか否かを 下記項目毎に調べてみて下さい。
o C / C++ の装飾名生成 規則
o 呼び出し規約


返信引用
puel
 puel
(@puel)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

回答ありがとうございます。
呼び出し規約は__cdecl __stdcall双方やってみたのですがだめでした。
C / C++ の装飾名生成 規則とはどこで確認すればよいのでしょうか。
よろしくお願いします。


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

それはそうと、解決したらこちらでもどう解決したか報告してくださいね

http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200305/03050030.txt


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

>aaa.dllを指定するところが特に無いのですが、どこかで指定しないといけないのでしょう
不要です。この件では暗黙的リンクによるDLLの為です。

>呼び出し規約は__cdecl __stdcall双方やってみたのですがだめでした。
念のため、__fastcallも試してみて下さい。

>C / C++ の装飾名生成 規則とはどこで確認すればよいのでしょうか。
bbb.objはC++として(拡張子がcpp cxx ccのどれか)作られた物かどうかを確認して
みて下さい。


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

>bbb.objはC++として(拡張子がcpp cxx ccのどれか)作られた物かどうかを確認して
みて下さい。
つまり、aaa.dllのソースの拡張子がcppか・・・を確認すればよいのですね。
確認してみます。

>aaa.hをインクルードしていれば
aaa.hはインクルードしています。

引き続き何かありましたら、よろしくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

OK-web でも同じもの見かけた。
マルチポストはマナー違反です。


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

aaa.dllがC++でなくCだった場合、どうすればよいのでしょうか。
bbb.cppおよびbbb.hで if __cplusplus extern cで囲めばよいのでしょうか。

また関数のコール方法ですが、
ULData* dd;
Calc_UL(dd);
でよいのでしょうか。

あらかじめ問題はつぶしておきたく思います。よろしくお願いします。

>それはそうと、解決したらこちらでもどう解決したか報告してくださいね
>OK-web でも同じもの見かけた。マルチポストはマナー違反です。
すみません、回答があまりつかず、緊急で困っています。
解決したらすべてにきちんと書き込みます。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

aaa.h を書き換えて:

#ifdef __cplusplus
extern C {
#endif

int Calc_UL(...);

#ifdef __cplusplus
}
#endif

とかやっとけば解決するんじゃないかしら。

> すみません、回答があまりつかず、緊急で困っています。
急を要する用事にはBBSは不向きです。

そもそもなぜに aaa の作者に相談しないんです?


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

επιστημηさん>
aaa.h を書き換えて:

#ifdef __cplusplus
extern C {
#endif
・・・
でうまくいきました。ありがとうございます!
ヘッダファイルのみの書き換えで大丈夫なんでしょうか?
ソースも書き換えなくて大丈夫なんですか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> ソースも書き換えなくて大丈夫なんですか?

え?

> ユーザーからはaaa.dllとaaa.libとaaa.hだけもらっており、...

じゃないんですか?


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

στημηさん>
>> ユーザーからはaaa.dllとaaa.libとaaa.hだけもらっており、...
>>じゃないんですか?

そうです、つまり、ユーザーに書き換えてもらう必要があるか、ということです。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

外部シンボルの整合を取るだけですから、re-compileの必要はないでしょう。


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

στημηさん>
本当に度々申し訳ありません。最後に教えてください。

・aaa.dllはCだったとうことですか?
・だとしたら、στημηさんはどうしてaaa.dllがCだとわかったのですか?

度々申し訳ありませんが、よろしくお願いします。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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