古いソフトの再ビルド(その2) 内容が変わったので

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
初心者

古いソフトの再ビルド(その2) 内容が変わったので

#1

投稿記事 by 初心者 » 17年前

内容が変わってきたみたいなので別の板をたてました。
申し訳ございません。
前回のエラーの件は何とか解決いたしました。
無事エラーは出なくなりました。
が、今度は別のエラーが発生してしまいました。
エラー内容は・・
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

とあります。
どのようにすればよろしいのでしょうか。
ご教授お願いいたします。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#2

投稿記事 by 初心者 » 17年前

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) で参照されました。

このエラーについては何とか解決できました。
あと、もう一つの方が分かりません。
お願いします。

Justy

Re:古いソフトの再ビルド(その2) 内容が変わったので

#3

投稿記事 by Justy » 17年前

 "msvcrt.lib"はリンクされていますか?

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#4

投稿記事 by 初心者 » 17年前

>  "msvcrt.lib"はリンクされていますか?

すいません。リンクのさせ方が分かりません。
どこかに設定があるのだと思いますが見あたりません。
初心者ですが、よろしくお願いします。

keichan

Re:古いソフトの再ビルド(その2) 内容が変わったので

#5

投稿記事 by keichan » 17年前

ソースファイルに
#pragma comment(lib,"msvcrt.lib")
と書くか、

プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 入力
のタブにある「追加の依存ファイル」へ msvcrt.lib を追加してみてください。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#6

投稿記事 by 初心者 » 17年前

> プロジェクト -> プロパティ -> 構成プロパティ -> リンカ -> 入力
> のタブにある「追加の依存ファイル」へ msvcrt.lib を追加してみてください。

こちらの方法でないとうまくリビルドできないので、こちらの方法でリビルドさせました。
うまくビルドはできるようになったのですが、プログラムを立ち上げるとエラーが出てきます。
最初は「msvcR80.dll」がない。といったエラーでしたので、それを探してきて、windowsのシステムフォルダにコピーしました。
すると、エラー内容が添付ファイル用に変化して、「初期かできませんでした。」といったエラーに変わりました。
初期化ってどうやればいいのでしょうか?

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#7

投稿記事 by 初心者 » 17年前

画像ファイルが添付できてないみたいです。
出てくるエラーはランタイムエラーで、エラーコードはR6034。
マニフェストがらみのエラーのようですが・・・
「マニフェストを追加しない」に設定してもだめでした。
解決方法をご教授ください。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#8

投稿記事 by 初心者 » 17年前

ランタイムエラーが出て来る件は何とか解決できました。
マニフェストファイルを作成して、読み込むことで対応できました。XPスタイルに対応してなかったのが原因みたいでした。
あとは、
「アプリケーションを正しく初期化できませんでした(0xc0000142)」のメッセージが出てくる分です。
これがわかりません。ご教授おねがいします。

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#9

投稿記事 by GPGA » 17年前

これだけの情報ですと、正直わからないとしか言いようがないです。
状況も、最初のときに比べてずいぶん変わってしまったような感じですし
もし問題がないのであれば、プロジェクトをどこかのサーバにアップして
ダウンロード出来るようにしてください。
時間があるときにチェックしてみます。

---------------------------------------------------------------
★ 雑談
最近かなり忙しく、最後に休んだのは9月23日。
今日は日曜なのにもかかわらず、10時に出社しそのまま かいちゃ に泊まりです。
---------------------------------------------------------------

と、いうわけなので時間があるときにチェックします。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#10

投稿記事 by 初心者 » 17年前

どうもありがとうございます。
以下のUPローダーにUPさせていただきました。

http://snowup.dip.jp/up1/upload.html

ファイルネームは、snow0126.zip です。
よろしくお願いします。

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#11

投稿記事 by GPGA » 17年前

ちょっと見てみましたが、結構手ごわそうです。
少なくとも私の実力では、ちょっとやそっと見たぐらいでは
わかりませんでした。

本格的に調査しないと、原因追及できそうにないので
他にわかる方がいたら、回答をお願いします。

一応、原因追求は時間の合間を見て、やってみようと思いますが
現在の忙しさを考えると、10日は軽くかかりそうです。

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#12

投稿記事 by GPGA » 17年前

10日はかかるとか言いましたが、終わりました。
原因がさっぱりつかめなかったので、プロジェクトを一から
作り直し、ソースコピペして実行したところ、動作しました。

元を知らない私には、その動作が正しい挙動かどうか判断できませんので
初心者さんが確認してください。

初心者さんが使用したアップローダーにアップしなおしました。

http://snowup.dip.jp/up1/upload.html

NAME:snow0136.zip

アップしてから思い出したのですが、エントリーポイントを
元の「EntoryPoint」ではく、「WinMain」のまま、アップしてしまいました。

特に挙動の変化はないと思いますが、一応報告ということで。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#13

投稿記事 by 初心者 » 17年前

ありがとうございます。
何とか起動はいたしました。
動作の検証を行っているのですが、リソースファイルの「IDD_MAGICITEM」になるエディットコントロールの値がうまく反映されていないみたいです。
お分かりになりますでしょうか?

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#14

投稿記事 by GPGA » 17年前

もう少し具体的に症状を書いてもらえますか。

このアプリケーションの仕様を知らない私は、これが何でどのように使った結果
どうなるということが一切わからないわけです。

「IDD_MAGICITEMに該当するエディットコントロール」と言っているので、

メニュー→ルート→マジックの価値を選択

を行うくらいまでは、わかりました。

この後に A を B した行った結果、C にならなければいけないのに、D の結果になってしまった。

上記の A B C D に該当する言葉を入れてください。
また、可能であればその部分に該当する画像が添付されていると、わかりやすいです。

初心者

Re:古いソフトの再ビルド(その2) 内容が変わったので

#15

投稿記事 by 初心者 » 17年前

返信、ありがとうございます。
動作としては言われたとおりです。
希望する動きは、
マジックの価値を選択→エディットコントロールに数値を入力→絵エディットコントロールの値を条件判断としてValue変数条件判断 というのが正しい動きです。
しかし、現在のところエディットコントロールへの入力値が反映されてません。エディットコントロール値を画面にそのまま表示する(total=エディットコントロール値)とすると、なぜかtotalの値がすべて「1」になってしまいます。
お分かりになりますか?

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#16

投稿記事 by GPGA » 17年前

> エディットコントロールの値を条件判断としてValue変数条件判断
これは、どの関数のどの部分のことを言っているのでしょうか?

> エディットコントロール値を画面にそのまま表示する(total=エディットコントロール値)
これは、エディットコントロールでOKを押した後に、表示しているのでしょうか?
また、totalとは、どの関数のどの変数のことを言っているのでしょうか?

とりあえずプログラムを見た限りでは、
マジックの価値を選択して出てきたエディットコントロールに値を入力し、最後にOKを押すと
settings.loot_items_value[ 各パラメータの番号 ]
の中に値が格納されるようになっています。
上記で言っている比較はここの値を使用しているのでしょうか?

Justy

Re:古いソフトの再ビルド(その2) 内容が変わったので

#17

投稿記事 by Justy » 17年前

>初心者さん
 最初からきちんと説明してはどうでしょうか。
 このままでは同じような問答を何回も繰り返さないと、こちらが問題を理解するに至りません。

 少なくともこのツールはUOのチートツールだと思われるので、当然UOが動いていないと正しく動かないですよね?
 totalとか画面、というのはUOのパラメータだったり画面だと思われるのですが、そういうことも含めて全部話さないと、こちらには全く伝わりません。


 で、ネットで同じものと思われるものを落としてきて比較したところ、loot_items_valueの要素数は 111に、関連したテーブルや処理もそれに合わせて違いがありました。
 メッセージIDにも大きく違いがありました。

 まぁ、どっちのソースが新しいのかは判りませんし、UOを持っていないんでこれ以上は判りませんが・・・・。

GPGA

Re:古いソフトの再ビルド(その2) 内容が変わったので

#18

投稿記事 by GPGA » 17年前

> 少なくともこのツールはUOのチートツールだと思われるので、当然UOが動いていないと正しく動かないですよね?
なぬ~。そうだったんですか。たしかにネットで調べてみたら、UOのチートツールっぽいですね。
私はてっきり、個人で作成したRPG用のツールで、現行ではどの操作をしても何も反応がないので、他に何かファイルが必要なんじゃないかとか思ってました。

そうなると、UO持っていない私にはどうしようもないですね。

閉鎖

“C言語何でも質問掲示板” へ戻る