いつもお世話になっています。ggです。
既に、Debug上でDLLを作成しています。
問題がなく動いています。
Releaseの場合
エラーが出ました。
例:
DLL側:BDLL.h
extern C BOOL WINAPI DrawPolygonDLL_Test2(int a);
BDLL.cpp
BOOL WINAPI DrawPolygonDLL_Test2(int a)
{
TRACE(a=%d\n, a);
return TRUE;
}
*.exe側
DrawPolygonDLL_Test2(a);
エラーメッセージ
error LNK2019: 未解決の外部シンボル _DrawPolygonDLL_Test2@4 が関数 public:
int __thiscall CStructCls_Poly::OpenNumberPoly_PolyStruct(int,class
ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >) (?
OpenNumberPoly_PolyStruct@CStructCls_Poly@@QAEHHV?$CStringT@DV?$StrTraitMFC@DV?
$ChTraitsCRT@D@ATL@@@@@ATL@@@Z) で参照されました。
見てもどう対処するかわかりません。
(OpenNumberPoly_PolyStruct(。。。)はExe側のクラスです)
よろしくお願いします。
環境:.Net MFC使用 WinXP
リリースビルドのオプションで、
自作DLLのLibをリンクして無いだけなんじゃありませんか。
デバッグのビルドオプションと比べてみてください。
> 見てもどう対処するかわかりません。
> (OpenNumberPoly_PolyStruct(。。。)はExe側のクラスです)
仲澤@失業者さんのアドバイスで解決しない場合でも結構ですが、
もっとシンプルなexeとdllをリリースモードで使ってみる実験をお勧めします。
自分の作ったプログラムよりも信頼できそうな、本やサイトのdllのサンプルを
ビルドしてみましょう。
1度に同時に取りかかる問題を小さく、少なくしましょう。
仲澤@失業者さん、たいちうさん
>デバッグのビルドオプションと比べてみてください。
「リンカ」-「入力」-「追加する依存関係」に
入力しました。
うまくできました。
なるほどね、
デバックモードとリリースモードは別のものと思ったいいでしょうね。
ちなみに、
デバックモードとリリースモードは何を違っていますか
デバックモードのサイズが大きい、
実行の速度も遅いだけですか。
どんな場合に使い分けますか。
(インストール用ファイル場合はリリースモードを使う)
助かりました。ほんとにありがとうございました。
主な差異(とくに設定を変更していない場合)
・リリース版は最適化が有効になっている。
・リンクするMFCやCRTなどのライブラリが違う。
・デバッグ版にはデバッグ情報がある。シンボルなどがあるとデバッグしやすい。
・デバッグ版はCRTデバッグ機能のメモリリーク検出やアサーションなどが有効。
使い分け
・初期の開発やデバッグは扱いやすいデバッグ版
・デバッグ版は基本的に開発用なので、作ったものを提供できるのはリリース版だけ
(勝手に提供してはいけないライセンスです>デバッグ版)
Ban さん、
ご返事ありがとう。
詳細な説明ありがとう。
一点不明があります。
>・リリース版は最適化が有効になっている。
最適化の有効といことは、
プロパティベージに
C/C++->最適化
と
リンかー>最適化
ということですか。
確かに、そこに、最適化のいくつかの選択項目があります。
でも、
デバックモードとリリースモードには最適化の項目が両方あります。
そうではない場合はリリースモード自身の最適化(選択できない)
ということなのでしょうか。
よろしくお願いします。
デバッグとリリースと言うのは開発環境が予め用意してくれている
プロジェクト設定のテンプレートが適応された物だと思ってください。
Microsoftがデバッグ時とリリース時に一般的によく使うと思われる
組合せを提示してくれていると考えて良いです。
但し、どんな組み合わせも大丈夫と言うわけでは有りません。
例えば、デバッガーでデバッグしたい場合に最適化を入れてしまうと
ソースと実際の実行ファイル無いのコードの対応が取れなくなって
うまくソース上でデバッグできなくなります。
なので、デバッグ時の設定には最適化が無い状態になっています。
リリースの方は一般的に最適化を設定する事が多いので
最初から最適化が入っているわけです。
この辺の設定は自分で追加で作成することも可能なので
そのプロジェクト特有の設定をした物なども作る事が可能です。
この辺は、開発環境のお勉強をしましょうと言うところですね。
この辺の内容が詳しく書いてある本と言うのはあいにく知らないですけれど。
わかると思うけど、念のために訂正。
誤
ソースと実際の実行ファイル無いのコードの対応が取れなくなって
正
ソースと実際の実行ファイル内のコードの対応が取れなくなって
すでにあるように、
「とくに設定を変更していない場合」の話です。
変更することは可能です。
PATIO さん、Ban さん
ご返事ありがとう。
>なので、デバッグ時の設定には最適化が無い状態になっています。
確かに、元の設定は最適化=無効 (/Od)
>リリースの方は一般的に最適化を設定する事が多いので
自分で「最大限の最適化 (/Ox)」を選択しました。
最初は、プロジェクト設定がたくさんありますので、
どうしたらいいか、まったくわかりませんでした。
今、ある程度の設定ができました。
どうも、ありがとうございました。