古いソフトの再ビルド(その2) 内容が変わったので
Posted: 2006年10月25日(水) 20:56
内容が変わってきたみたいなので別の板をたてました。
申し訳ございません。
前回のエラーの件は何とか解決いたしました。
無事エラーは出なくなりました。
が、今度は別のエラーが発生してしまいました。
エラー内容は・・
error LNK2019: 未解決の外部シンボル _memset が関数 "void __cdecl reset_state(void)" (?reset_state@@YAXXZ) で参照されました。
error LNK2019: 未解決の外部シンボル ___security_cookie が関数 "void __cdecl single_click(unsigned int)" (?single_click@@YAXI@Z) で参照されました。
error LNK2019: 未解決の外部シンボル @__security_check_cookie@4 が関数 "void __cdecl single_click(unsigned int)" (?single_click@@YAXI@Z) で参照されました。
error LNK2019: 未解決の外部シンボル _memcpy が関数 "void __cdecl packetd6(void)" (?packetd6@@YAXXZ) で参照されました。
Debug/FastLoot.exe : fatal error LNK1120: 外部参照 4 が未解決です。
です。objファイルを作成するときにエラーを発生しています。
今回も自分なりに探ってみました。その結果、DLLファイルが作れなくて失敗してるみたいです。
dllファイルのみをビルドしても同じエラーが発生しました。
で、そのdllファイルのソースなんですが、該当すると思われる部分は、
static void alloc_shard_memory (u32 index, u32 size)
{
if (share.packet_size_prev[index] < size)
{
size = (size + 4095) & ~4095;
free_shard_memory (index);
}
else if (share.packet_size_prev[index] != global.packet_size_now[index])
{
size = share.packet_size_prev[index];
free_shard_memory (index);
}
if (global.packet_file_mapping[index] == NULL)
{
char sharname[24];
wsprintf (sharname, "UOH5:%d:%d", index, size);
share.packet_size_prev[index] = global.packet_size_now[index] = size;
global.packet_file_mapping[index] = CreateFileMapping ((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, global.packet_size_now[index], sharname);
global.packet_buffer[index] = (u8*)MapViewOfFile (global.packet_file_mapping[index], FILE_MAP_ALL_ACCESS, 0, 0, 0);
}
}
と
static void recv_recv_packet (const u8* adrs)
{
int len = share.packet_table[*adrs];
int flag = (len == 0x8000);
if (flag) len = *(u16*)(adrs +1);
alloc_shard_memory (0, len);
analyze_packet (adrs, len);
memcpy (global.packet_buffer[0], adrs, len);
if (flag)
{
_asm
{
mov eax,global.packet_buffer[0]
rol word ptr[eax+1],8
}
}
send_event (WM_USER+400, len, 0);
if (flag)
{
_asm
{
mov eax,global.packet_buffer[0]
rol word ptr[eax+1],8
}
}
}
です。
それで、例のごとく、ヘッダファイルに
#ifndef __UOHOOK5_H__
#define __UOHOOK5_H__
#define inline _inline
typedef __int8 s8;
typedef __int16 s16;
typedef __int32 s32;
typedef unsigned __int8 u8;
typedef unsigned __int16 u16;
typedef unsigned __int32 u32;
extern "C" {
bool WINAPI UOHOOK_IsHook();
u32 WINAPI UOHOOK_GetClientType();
HWND WINAPI UOHOOK_GetTargetWnd();
u32 WINAPI UOHOOK_GetPacketLength (const u8* adrs);
u32 WINAPI UOHOOK_GetXLoc();
u32 WINAPI UOHOOK_GetYLoc();
u32 WINAPI UOHOOK_GetPlayerID();
bool WINAPI UOHOOK_GetEvent (u32*, u32*, u32*);
void WINAPI UOHOOK_FreeEvent (UINT cmd = 0);
bool WINAPI UOHOOK_SendPacketToClient (const u8* adrs, int len);
bool WINAPI UOHOOK_SendPacketToServer (const u8* adrs, int len);
}
#endif
とあります。
どのようにすればよろしいのでしょうか。
ご教授お願いいたします。
申し訳ございません。
前回のエラーの件は何とか解決いたしました。
無事エラーは出なくなりました。
が、今度は別のエラーが発生してしまいました。
エラー内容は・・
error LNK2019: 未解決の外部シンボル _memset が関数 "void __cdecl reset_state(void)" (?reset_state@@YAXXZ) で参照されました。
error LNK2019: 未解決の外部シンボル ___security_cookie が関数 "void __cdecl single_click(unsigned int)" (?single_click@@YAXI@Z) で参照されました。
error LNK2019: 未解決の外部シンボル @__security_check_cookie@4 が関数 "void __cdecl single_click(unsigned int)" (?single_click@@YAXI@Z) で参照されました。
error LNK2019: 未解決の外部シンボル _memcpy が関数 "void __cdecl packetd6(void)" (?packetd6@@YAXXZ) で参照されました。
Debug/FastLoot.exe : fatal error LNK1120: 外部参照 4 が未解決です。
です。objファイルを作成するときにエラーを発生しています。
今回も自分なりに探ってみました。その結果、DLLファイルが作れなくて失敗してるみたいです。
dllファイルのみをビルドしても同じエラーが発生しました。
で、そのdllファイルのソースなんですが、該当すると思われる部分は、
static void alloc_shard_memory (u32 index, u32 size)
{
if (share.packet_size_prev[index] < size)
{
size = (size + 4095) & ~4095;
free_shard_memory (index);
}
else if (share.packet_size_prev[index] != global.packet_size_now[index])
{
size = share.packet_size_prev[index];
free_shard_memory (index);
}
if (global.packet_file_mapping[index] == NULL)
{
char sharname[24];
wsprintf (sharname, "UOH5:%d:%d", index, size);
share.packet_size_prev[index] = global.packet_size_now[index] = size;
global.packet_file_mapping[index] = CreateFileMapping ((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, global.packet_size_now[index], sharname);
global.packet_buffer[index] = (u8*)MapViewOfFile (global.packet_file_mapping[index], FILE_MAP_ALL_ACCESS, 0, 0, 0);
}
}
と
static void recv_recv_packet (const u8* adrs)
{
int len = share.packet_table[*adrs];
int flag = (len == 0x8000);
if (flag) len = *(u16*)(adrs +1);
alloc_shard_memory (0, len);
analyze_packet (adrs, len);
memcpy (global.packet_buffer[0], adrs, len);
if (flag)
{
_asm
{
mov eax,global.packet_buffer[0]
rol word ptr[eax+1],8
}
}
send_event (WM_USER+400, len, 0);
if (flag)
{
_asm
{
mov eax,global.packet_buffer[0]
rol word ptr[eax+1],8
}
}
}
です。
それで、例のごとく、ヘッダファイルに
#ifndef __UOHOOK5_H__
#define __UOHOOK5_H__
#define inline _inline
typedef __int8 s8;
typedef __int16 s16;
typedef __int32 s32;
typedef unsigned __int8 u8;
typedef unsigned __int16 u16;
typedef unsigned __int32 u32;
extern "C" {
bool WINAPI UOHOOK_IsHook();
u32 WINAPI UOHOOK_GetClientType();
HWND WINAPI UOHOOK_GetTargetWnd();
u32 WINAPI UOHOOK_GetPacketLength (const u8* adrs);
u32 WINAPI UOHOOK_GetXLoc();
u32 WINAPI UOHOOK_GetYLoc();
u32 WINAPI UOHOOK_GetPlayerID();
bool WINAPI UOHOOK_GetEvent (u32*, u32*, u32*);
void WINAPI UOHOOK_FreeEvent (UINT cmd = 0);
bool WINAPI UOHOOK_SendPacketToClient (const u8* adrs, int len);
bool WINAPI UOHOOK_SendPacketToServer (const u8* adrs, int len);
}
#endif
とあります。
どのようにすればよろしいのでしょうか。
ご教授お願いいたします。