銅子OM
JO1SIM出島です。
CWでお世話になっています!!!
コンパイルのオプションのお話から察するに、VS2013(Express for Windows Desktop?)でWin32プラットフォームの開発状態であると思いますのでその前提でお話しします。
動的リンクで成功するということですので、やはり呼び出し規則だけの問題だと思います。コンパイルオプションではなく、呼び出す関数だけ…
extern "C"
{ int __stdcall THW_read(TThLog *,...);
:};
みたいな宣言ではダメでしょうか? extern "C" は関数名のみで名前を解決するために必要で、__stdcallは hamlog50.h にWINAPIとして定義してある通り、APIのコール方法を規定してます。
.
..そういう私もDLLが呼び出せないときを想定し、動的リンクで呼び出してますが…。
> The value of ESP was not properly saved across a function call.が出てうまくいきません。
> VS2013VC++ で Hamlog50.dllを使ってHamlogの操作をしたいのです。
> アクセスに必要なHamlog50.Libも作成し関数にはextern "C" __declspec(dllexport) 及びextern "C" __declspec(dllimport)を付け
> DLL作成時も含めて__cdecl(/Gd) オプション(標準)で行っています。
> これで名前修飾もなくビルドはエラーがでず完了します。
> ところが、デバッグを行うとHamlog50.dllを呼び出す関数のところでこの警告が出てしまいます。 GetThdllVersion()等の様に引数の無いものは大丈夫なようですが(当たり前ですか)、SetDbsShare_VC(0)と単純なものでも発生します。
> 一方やむなく、 LoadLibrary(L"Hamlog50.dll")
> GetProcAddress(hDLL, "HamlogOpen")
> などからコールする方法では問題なくアクセス出来ることも確認しています。何か解決策がありそうなんですが。この辺の処うまく切り抜けておられる方アドバイスお願いいたします。
> C++側の呼び出し規約を __stdcall (/Gz) に変更すると良いとの情報も得ていますが、名前修飾の問題が解決出来ませんでした。