横取りソフト開発キットでリンクエラーNo.00145
ansilvia さん 00/07/26 00:19
 
はじめまして、

横取りソフト開発キット付属のInetSpyをVC++6で
コンパイルしたところ、

リンク中...
   ライブラリ Debug/InetSpy.lib とオブジェクト Debug/InetSpy.exp を作成中
DllMain.obj : error LNK2001: 外部シンボル ""void __stdcall YdmSetModuleData(voi
d *,struct HWND__ *,unsigned long)" (?YdmSetModuleData@@YGXPAXPAUHWND__@@K@
Z)" は未解決です
DllMain.obj : error LNK2001: 外部シンボル ""unsigned long __stdcall YdmGetModul
eData(void *,struct HWND__ *)" (?YdmGetModuleData@@YGKPAXPAUHWND__@@@Z)" は
未解決です
Debug/InetSpy.dll : fatal error LNK1120: 外部参照 2 が未解決です。

というリンクエラーが出ます。

00/05/20のえす☆ふぃおさんの
書き込みと関連が有るように思えますが、
どうでしょうか?



[ ]
RE:00145 横取りソフト開発キットでリンクNo.00146
える さん 00/07/26 14:07
 
>Debug/InetSpy.dll : fatal error LNK1120: 外部参照 2 が未解決です。
>というリンクエラーが出ます。

ydmapi.h の頭のあたりの

void YdmSetModuleData( HTRANS hTrans, HWND hwnd, DWORD dw );
DWORD YdmGetModuleData( HTRANS hTrans, HWND hwnd );

これらを YdmAPI.lib を dump した結果にあわせて

#ifdef STRICT
void WINAPIV YdmSetModuleData( HTRANS hTrans, LPVOID hwnd, DWORD dw );
DWORD WINAPIV YdmGetModuleData( HTRANS hTrans, LPVOID hwnd );
#else
void YdmSetModuleData( HTRANS hTrans, HWND hwnd, DWORD dw );
DWORD YdmGetModuleData( HTRANS hTrans, HWND hwnd );
#endif

と修正すれば通ります。
たぶん、InetSpy はソースコード中の FARPROC を WNDPROC に修正する必要もありま
す。

本来ならば

#define HTRANS HANDLE



DECLARE_HANDLE(HTRANS)

に修正して YdmAPI.lib を再構築すべきでしょうね。
# VC5 にも DECLARE_HANDLE はありますよね。

[ ]
RE:00146 横取りソフト開発キットでリンクNo.00147
ansilvia さん 00/07/27 03:23
 
>本来ならば
>#define HTRANS HANDLE
>を
>DECLARE_HANDLE(HTRANS)
>に修正して YdmAPI.lib を再構築すべきでしょうね。
># VC5 にも DECLARE_HANDLE はありますよね。

ご回答ありがとうございます。
おっしゃる通りに修正しましたら、コンパイルが通りました。

でも、開発キットにはなぜか入っているはずの
「横取り丸API用DLLのソースコード(YdmApiSrc.lzh)」が
付いてきてませんよね。←当然といえば当然でしょうが・・・(^^;


[ ]
RE:00147 横取りソフト開発キットでリンクNo.00148
える さん 00/07/27 16:35
 
>>本来ならば
>>#define HTRANS HANDLE
>>を
>>DECLARE_HANDLE(HTRANS)
>>に修正して YdmAPI.lib を再構築すべきでしょうね。
>># VC5 にも DECLARE_HANDLE はありますよね。
>でも、開発キットにはなぜか入っているはずの
>「横取り丸API用DLLのソースコード(YdmApiSrc.lzh)」が
>付いてきてませんよね。←当然といえば当然でしょうが・・・(^^;

Export Library はソースコードがなくても生成できますよ。

[ ]
RE:00146 横取りソフト開発キットでリンNo.00149
秀まるお さん 00/07/31 10:00
 
 すみません。なぜかYdmSetModuleDataその他一部のAPIがWINAPI宣言されていませ
んでした。

 いまさらWINAPIに修正してしまうと動かなくなってしまうようなので、__cdecl付
き宣言にしてやる必要があるようです。

> DECLARE_HANDLE(HTRANS)
>
> に修正して YdmAPI.lib を再構築すべきでしょうね。

 そのような技があったとは知りませんでした。これも修正しておきます。


[ ]
RE:00149 横取りソフト開発キットでリンNo.00150
える さん 00/07/31 10:14
 
>> DECLARE_HANDLE(HTRANS)
>> に修正して YdmAPI.lib を再構築すべきでしょうね。
> そのような技があったとは知りませんでした。これも修正しておきます。

ついでにできれば、YdmAPI.h は C naming にしてほしいです。
API のインターフェスを見る限りでは C++ naming である必要性はないと思えます。

YdmAPI.h の先頭に

#ifdef __cplusplus
extern "C" {
#endif

最後に

#ifdef __cplusplus
}
#endif

を足してあげるだけだったかな?
YdmAPI.def も記述しなければいけないのかもしれない。
詳細は Visual C/C++ のヘルプみてください (^^;

[ ]
RE:00150 横取りソフト開発キットでリンNo.00151
秀まるお さん 00/08/02 13:33
 
 たしかに、C++で作っている関係で、C++ namingになってしまっているようです。

 ただ、今から extern "C"を入れてしまうと、現状の横取りモジュールがすべて動
作しなくなってしまうという問題が起きてしまいます。ってな訳で、C++で作っても
らうことを前提にするしかなさそうです。

 それか、C++ namingとC namingの両方の入り口を用意するかですが、たぶん横取り
モジュールを作る人ってそんなにいないと思うので、今のままにしておきます。


[ ]
RE:00151 横取りソフト開発キットでリンNo.00152
える さん 00/08/02 15:31
 
> たしかに、C++で作っている関係で、C++ namingになってしまっているようです。
> ただ、今から extern "C"を入れてしまうと、現状の横取りモジュールがすべて動
>作しなくなってしまうという問題が起きてしまいます。ってな訳で、C++で作っても
>らうことを前提にするしかなさそうです。
> それか、C++ namingとC namingの両方の入り口を用意するかですが、たぶん横取
>りモジュールを作る人ってそんなにいないと思うので、今のままにしておきます。

なるほど、単純に VC++ の C++ naming を扱いづらい開発環境が多いので。。。

# 私は SSL 対応 InetSPY つくっただけだから特に困ってない

[ ]