2010-12-14 15 views
1

私はDelphi 2006からDelphi XEにプロジェクトをアップグレードしました。私のアプリを閉じるときに例外が出ることを除いて、すべてが期待どおりに動作しています。Delphi 2006からDelphi XEへのアップグレード後にアプリケーションを終了するときに無効なポインタ例外

コード行に壊れていません。それは、LEAVEコマンドでCPUウィンドウに壊れます。 私はユーレカのログを添付しました。

EurekaLog 6.0.25 

Application: 
------------------------------------------------------ 
    1.1 Start Date  : Fri, 3 Dec 2010 10:44:17 +0100 
    1.2 Name/Description: LogoTid.exe 
    1.3 Version Number : 
    1.4 Parameters  : 
    1.5 Compilation Date: Fri, 3 Dec 2010 10:44:15 +0100 
    1.6 Up Time   : 5 seconds 

Exception: 
---------------------------------------------------- 
    2.1 Date   : Fri, 3 Dec 2010 10:44:22 +0100 
    2.2 Address  : 004062A0 
    2.3 Module Name : LogoTid.exe 
    2.4 Module Version: 
    2.5 Type   : EInvalidPointer 
    2.6 Message  : Invalid pointer operation. 
    2.7 ID   : 5E21 
    2.8 Count   : 1 
    2.9 Status  : New 
    2.10 Note   : 

User: 
------------------------------------------------------- 
    3.1 ID  : oda 
    3.2 Name  : 
    3.3 Email  : 
    3.4 Company : 
    3.5 Privileges: SeIncreaseQuotaPrivilege  - OFF 
        SeSecurityPrivilege    - OFF 
        SeTakeOwnershipPrivilege  - OFF 
        SeLoadDriverPrivilege   - OFF 
        SeSystemProfilePrivilege  - OFF 
        SeSystemtimePrivilege   - OFF 
        SeProfileSingleProcessPrivilege - OFF 
        SeIncreaseBasePriorityPrivilege - OFF 
        SeCreatePagefilePrivilege  - OFF 
        SeBackupPrivilege    - OFF 
        SeRestorePrivilege    - OFF 
        SeShutdownPrivilege    - OFF 
        SeDebugPrivilege    - ON 
        SeSystemEnvironmentPrivilege - OFF 
        SeChangeNotifyPrivilege   - ON 
        SeRemoteShutdownPrivilege  - OFF 
        SeUndockPrivilege    - OFF 
        SeManageVolumePrivilege   - OFF 
        SeImpersonatePrivilege   - ON 
        SeCreateGlobalPrivilege   - ON 
        SeIncreaseWorkingSetPrivilege - OFF 
        SeTimeZonePrivilege    - OFF 
        SeCreateSymbolicLinkPrivilege - OFF 

Active Controls: 
------------------------------------------------------------------ 
    4.1 Form Class : TAppBuilder 
    4.2 Form Text : LogoTid - Delphi XE - uMain [Running] [Built] 
    4.3 Control Class: 
    4.4 Control Text : 

Computer: 
------------------------------------------------------------------------------------------------ 
    5.1 Name   : OLE-LAPTOP 
    5.2 Total Memory : 3891 Mb 
    5.3 Free Memory : 778 Mb 
    5.4 Total Disk : 120 Gb 
    5.5 Free Disk  : 57,93 Gb 
    5.6 System Up Time: 1 day, 23 hours, 16 minutes, 56 seconds 
    5.7 Processor  : Intel(R) Core(TM) i5 CPU  M 520 @ 2.40GHz 
    5.8 Display Mode : 1920 x 1200, 32 bit 
    5.9 Display DPI : 96 
    5.10 Video Card : Intel(R) Graphics Media Accelerator HD (driver 8.15.10.2025 - RAM 1721 MB) 
    5.11 Printer  : RICOH Aficio 2232C RPCS (driver 1.0.0) 

Operating System: 
-------------------------------------------- 
    6.1 Type : Microsoft Windows 7 (64 bit) 
    6.2 Build # : 7600 
    6.3 Update : 
    6.4 Language: Danish 
    6.5 Charset : 0 


Call Stack Information: 
------------------------------------------------------------------- 
|Address |Module  |Unit  |Class|Procedure/Method |Line | 
------------------------------------------------------------------- 
|Running Thread: ID=5632; Priority=0; Class=; [Main]    | 
|-----------------------------------------------------------------| 
|00D171A1|LogoTid.exe |LogoTid.dpr|  |     |32[5]| 
|76A73675|kernel32.dll|   |  |BaseThreadInitThunk|  | 
------------------------------------------------------------------- 



Assembler Information: 
----------------------------------------------------------------- 
; System.TObject.FreeInstance 
; ---------------------------- 
00406294 push ebx 
00406295 mov  ebx, eax 
00406297 mov  eax, ebx 
00406299 call System.TObject.CleanupInstance 
0040629E mov  eax, ebx 
004062A0 call System._FreeMem     ; <-- EXCEPTION 
004062A5 pop  ebx 
004062A6 ret 

Registers: 
----------------------------- 
EAX: 02AF8058 EDI: 00000001 
EBX: 004062A5 ESI: 004062A5 
ECX: 0041D700 ESP: 0018FE98 
EDX: 004062A5 EIP: 004062A0 

Stack:    Memory Dump: 
------------------ --------------------------------------------------------------------------- 
0018FE98: FFFFFF02 004062A0: E8 3B E7 FF FF 5B C3 90 83 C0 CC 8B 00 C3 8B C0 .;...[.......... 
0018FE9C: 00404B78 004062B0: 84 D2 74 08 83 C4 F0 E8 54 05 00 00 84 D2 74 0F ..t.....T.....t. 
0018FEA0: 02B1CEC0 004062C0: E8 A3 05 00 00 64 8F 05 00 00 00 00 83 C4 0C C3 .....d.......... 
0018FEA4: 02B1CEC0 004062D0: E8 E3 05 00 00 84 D2 7E 05 E8 82 05 00 00 C3 90 .......~........ 
0018FEA8: 00404BC2 004062E0: 85 C0 74 07 B2 01 8B 08 FF 51 FC C3 53 56 57 89 ..t......Q..SVW. 
0018FEAC: 02B1CEC0 004062F0: C3 89 D7 AB 8B 4B CC 31 C0 51 C1 E9 02 49 F3 AB .....K.1.Q...I.. 
0018FEB0: 0018FEE8 00406300: 59 83 E1 03 F3 AA 89 D0 89 E2 8B 4B AC 85 C9 74 Y..........K...t 
0018FEB4: 004062A5 00406310: 01 51 8B 5B D0 85 DB 74 04 8B 1B EB ED 39 D4 74 .Q.[...t.....9.t 
0018FEB8: 03A02F01 00406320: 1D 5B 8B 0B 83 C3 04 8B 73 10 85 F6 74 06 8B 7B .[......s...t..{ 
0018FEBC: 00406865 00406330: 14 89 34 07 83 C3 1C 49 75 ED 39 D4 75 E3 5F 5E ..4....Iu.9.u._^ 
0018FEC0: 0045B949 00406340: 5B C3 8B C0 53 56 89 C3 89 C6 8B 36 8B 56 B4 8B [...SV.....6.V.. 
0018FEC4: 03A02FA0 00406350: 76 D0 85 D2 74 07 E8 85 36 00 00 89 D8 85 F6 75 v...t...6......u 
0018FEC8: 03A02F01 00406360: E9 89 D8 E8 78 06 00 00 5E 5B C3 90 87 D1 81 F9 ....x...^[...... 
0018FECC: 004062EB 00406370: 00 00 00 FF 73 11 81 F9 00 00 00 FE 72 07 0F BF ....s.......r... 
0018FED0: 00912606 00406380: C9 03 08 FF 21 FF E1 81 E1 FF FF FF 00 01 C1 89 ....!........... 
0018FED4: 00000000 00406390: D0 8B 11 E9 A8 59 00 00 C3 8D 40 00 3B C2 0F 94 [email protected];... 

---編集

[OK]を、エラーが離れて行き、トラブルを見つけるまで私のプログラムの部分で回してみました。

これは私のWebサービスのWSDLで生成されたプロキシです。サービス上で関数を呼び出さずにプロキシオブジェクトを作成すると、エラーがスローされます。

私は、プロキシオブジェクトの作成以外のコードなしでテストプロジェクトを作成しましたが、エラーもスローされます。私はまた別のWebサービス、同じエラーで試してみました。どちらのWebサービスもDelphi 2006(.net 1.1)で作成されています。

最後に、VS2010で作成された.net 4.0 Webサービスを試しました。問題はありません。したがって、Delphi XEのいずれかのプロジェクトは、.net 1.1 WebservicesまたはDelphi 2006 Webservicesと互換性がありません。いずれにせよ、それは混乱です。

これを解決する方法はありますか、おそらく回避策ですか?

+0

これは私たちにとって何が問題であるかを知るには十分ではありません。コールスタックを提供してください(例外ダイアログの2番目のタブ) – ComputerSaysNo

+0

インターフェイスを使用していますか? IInterface/IUnknown? –

答えて

0

ソリューション/回避策を見つけました。

Webサービスをフォームで直接使用するとエラーが発生します。

空のvclフォームプロジェクトを作成し、wsdlジェネレータを使用してWebサービスプロキシを生成します。使用セクションにプロキシクラスを含めます。プロキシのプライベートオブジェクトを宣言し、次にフォームcreateでプロキシクラスgetXXXXXXX関数を使用してオブジェクトを開始します。プロジェクトを実行します。

フォームを閉じると、例外が発生します。

独自のクラスを作成し、このクラスを通してWebサービスプロキシとやりとりすることです。

4

ログはここでは役に立ちません。これはメモリ破損の問題のように見えます。これは、コードが文字列のインデックス付き操作(文字列の文字位置への書き込みなど)を実行し、文字列がPCharまたは同様のコードにキャストされているすべてのコードを修正していない場合に発生します。

つまり、コードを慎重に分析する必要があります。例外が表示されなくなるまで、一部のモジュールとコードブロックを完全にオフにすることから始めます。その後、1つずつ追加してください。

+0

コードブロックをオフにすると、エラーを特定するのに役立ちました..ありがとうございます。 – olve

+0

@olveあなたの新しい情報に基づいて新しい質問を作成することをお勧めします。つまり、より多くの人々がそれを見ることができるでしょう。 –

+0

私はそれを行うでしょう..ありがとう。 – olve

3

stringは、Unicode文字列(1文字あたり2バイト)であり、AnsiString(1バイトあたり1バイト)ではありません。文字列の生のバイトで再生する場合、これは大きな問題です。それを解決するには、すべてをAnsiStringに置き換え、すべてcharAnsiCharに置き換えます。もちろん、これを行うことでUnicodeサポートを失うことになります。よりよい解決策は、文字列処理ルーチンを修正することです。多くの場合、必要なのは倍率を加算することだけです。sizeof(char)(= 2)をこことその都度入れます。

例(旧コード):

byteSize = length(str); 

例(新しいコード):

byteSize = length(str) * sizeof(char); 
+0

unicodeは必要ありません... ansistringとansicharにプロジェクト全体の名前を変更しようとしましたが、それは助けになりませんでした。 – olve

関連する問題