Помогите портировать с Delfi на MASM

Тема в разделе "WASM.BEGINNERS", создана пользователем random, 14 апр 2009.

  1. random

    random New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    38
    Сабж
    Код (Text):
    1. var
    2.   NeedBytes,dwError:integer;
    3.   RasEntry: TRasEntry;
    4.   RasDialParams:TRasDialParams;
    5.   EntryName : String;
    6. begin
    7.   EntryName := 'Мой конект';
    8.   NeedBytes:=0;
    9.   HeapAlloc(GetProcessHeap, HEAP_ZERO_MEMORY, NeedBytes);
    10.   RasEntry.dwSize := sizeof(TRasEntry);
    11.   Fillchar(RasEntry, sizeof(TRasEntry), 0);
    12.  
    13.   with RasEntry do
    14.   begin
    15.    szDeviceType:= 'PPPoE';
    16.    // настройки соединения
    17.    dwfOptions := RDEOPT_PreviewUserPw or
    18.                  RASEO_IpHeaderCompression or
    19.                  RASEO_ModemLights or
    20.                  RASEO_IpHeaderCompression;
    21.   end;
    22.  
    23.   RasEntry.dwSize := sizeof(TRasEntry);
    24.   dwError:=RasSetEntryPropertiesA(
    25.     nil,
    26.     PChar(EntryName),
    27.     @RasEntry,
    28.     sizeof(TRasEntry),
    29.     nil,
    30.     0);
    31.  
    32.   // настройки логинов и паролей
    33.   RasDialParams.dwSize := sizeof(TRasDialParams);
    34.   StrPCopy(RasDialParams.szEntryName,EntryName);
    35.   StrPCopy(RasDialParams.szUserName,'Васин логин');
    36.   StrPCopy(RasDialParams.szPassword,'Васин пароль');
    37.  
    38.   RasSetEntryDialParams(nil,  RasDialParams,  False);
    39. end;
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    random
    а в дельфях нельзя указать компилятору сделать асм листинг?
     
  3. random

    random New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    38
    У меня Delfi нет... К тому же мне нужен файл именно для масм - а там заморочки с win32extra.inc

    в общем я переписал на масм все инклюды и секцию data.
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include kernel32.inc
    5. includelib kernel32 .lib
    6. include rasapi32.inc
    7. ncludelib rasapi32.lib
    8. include windows.inc
    9. .data
    10. NeedBytes dw 0
    11. EntryName db "Connect",0
    12. DeviceType db "PPPOE"
    13. RasEntry RASENTRY <>
    14. RasDialParams RASDIALPARAMS <>
    15. hHeap dd ?
    16. .code
    17. start:
    18. invoke GetProcessHeap
    19. invoke HeapAlloc,hHeap,HEAP_ZERO_MEMORY,NeedBytes
    20. end start
    Дальше у меня ступор
    Подскажите хотя бы как на C будет выглядеть, дельфи вообще не знаю
     
  4. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    int NeedBytes,dwError;
    TRasEntry RasEntry; // я так понимаю ТRasEntry толи внутр клас толи своя структура
    TRasDialParams RasDialParams; // то же
    char EntryName[200]; // ахз пусть с запасом

    void someshit() {

    lstrcpy(EntryName,"мой конект");
    NeedBytes = 0;

    HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, NeedBytes);
    RasEntry.dwSize = sizeof(TRasEntry);
    memset(RasEntry, sizeof(TRasEntry), 0);

    lstrcpy(RasEntry.szDeviceType,"PPPoE");
    // настройки соединения
    RasEntry.dwfOptions = RDEOPT_PreviewUserPw ||
    RASEO_IpHeaderCompression ||
    RASEO_ModemLights ||
    RASEO_IpHeaderCompression;


    RasEntry.dwSize = sizeof(TRasEntry);
    dwError = RasSetEntryPropertiesA(NULL, EntryName, &RasEntry, sizeof(TRasEntry), NULL, 0);

    // настройки логинов и паролей
    RasDialParams.dwSize = sizeof(TRasDialParams);
    lstrcpy(RasDialParams.szEntryName,EntryName);
    lstrcpy(RasDialParams.szUserName,"Васин логин");
    lstrcpy(RasDialParams.szPassword,"Васин пароль");

    RasSetEntryDialParams(NULL, RasDialParams, false);
    }

    вроде так, наскока помню
     
  5. random

    random New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    38
    Не, опять ничего не получается... Сравнил структуру RasEntry в MSDТ и в inc файле winextra.inc - не совпадают... Поправил - в отладчике все равно косяк с размером структуры - у меня RasEntryA весит 07BF. Еще бы знать скока надо...

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include rasapi32.inc
    5. includelib rasapi32.lib
    6. include windows.inc
    7. include shell32.inc
    8. includelib shell32.lib
    9. RASFP_Ppp     equ 1
    10. RASET_Broadband equ 5
    11. .data
    12. szEntryName db "test",0
    13. szDeviceType db "PPPoE",0
    14. szLocalPhoneNumber db "Connect",0
    15. szLogin  db "testlogin",0
    16. szPassword db "123456",0
    17. RasEntry RASENTRY <0>
    18. RasDialParams RASDIALPARAMS <0>
    19. .code
    20. start:
    21.  
    22. mov esi,offset szDeviceType
    23. mov edi,offset RasEntry.szDeviceType
    24. mov ecx,sizeof szDeviceType
    25. rep movsb
    26.  
    27. mov RasEntry.dwType,RASET_Broadband
    28.  
    29. mov RasEntry.dwfOptions,RASEO_PreviewUserPw OR RASEO_IpHeaderCompression OR RASEO_ModemLights OR RASEO_IpHeaderCompression
    30.  
    31. mov RasEntry.dwSize,sizeof RASENTRY
    32. mov RasEntry.dwFramingProtocol,RASFP_Ppp
    33. invoke RasSetEntryProperties,NULL,ADDR szEntryName,ADDR RasEntry,sizeof RASENTRY,NULL,0
    34.  
    35. mov RasDialParams.dwSize,sizeof RASDIALPARAMS
    36.  
    37. mov esi,offset szEntryName
    38. mov edi,offset RasDialParams.szEntryName
    39. mov ecx,sizeof szEntryName
    40. rep movsb
    41.  
    42. mov esi,offset szLogin
    43. mov edi,offset RasDialParams.szUserName
    44. mov ecx,sizeof szLogin
    45. rep movsb
    46.  
    47. mov esi,offset szPassword
    48. mov edi,offset RasDialParams.szPassword
    49. mov ecx,sizeof szPassword
    50. rep movsb
    51.  
    52. invoke RasSetEntryDialParams,NULL,ADDR RasDialParams,1
    53. end start
    Правленая структура:
    Код (Text):
    1. RASENTRYA STRUCT
    2.     dwSize dd ?
    3.     dwfOptions dd ?
    4.     dwCountryID dd ?
    5.     dwCountryCode dd ?
    6.     szAreaCode db RAS_MaxAreaCode + 1 dup(?)
    7.     szLocalPhoneNumber db RAS_MaxPhoneNumber + 1 dup(?)
    8.     dwAlternateOffset dd ?
    9.     ipaddr RASIPADDR <>
    10.     ipaddrDns RASIPADDR <>
    11.     ipaddrDnsAlt RASIPADDR <>
    12.     ipaddrWins RASIPADDR <>
    13.     ipaddrWinsAlt RASIPADDR <>
    14.     dwFrameSize dd ?
    15.     dwfNetProtocols dd ?
    16.     dwFramingProtocol dd ?
    17.     szScript db MAX_PATH dup(?)
    18.     szAutodialDll db MAX_PATH dup(?)
    19.     szAutodialFunc db MAX_PATH dup(?)
    20.     szDeviceType db RAS_MaxDeviceType + 1 dup(?)
    21.     szDeviceName db RAS_MaxDeviceName + 1 dup(?)
    22.     szX25PadType db RAS_MaxPadType + 1 dup(?)
    23.     szX25Address db RAS_MaxX25Address + 1 dup(?)
    24.     szX25Facilities db RAS_MaxFacilities + 1 dup(?)
    25.     szX25UserData db RAS_MaxUserData + 1 dup(?)
    26.     dwChannels dd ?
    27.     dwReserved1 dd ?
    28.     dwReserved2 dd ?
    29.     dwSubEntries dd ?
    30.     dwDialMode dd ?
    31.     dwDialExtraPercent dd ?
    32.     dwDialExtraSampleSeconds dd ?
    33.     dwHangUpExtraPercent dd ?
    34.     dwHangUpExtraSampleSeconds dd ?
    35.     dwIdleDisconnectSeconds dd ?
    36.     dwType dd ?
    37.     dwEncryptionType dd ?
    38.     dwCustomAuthKey dd ?
    39.     guidId GUID <>
    40.     szCustomDialDll db MAX_PATH dup (?)
    41.     dwVpnStrategy dd ?
    42.     dwfOptions2 dd ?
    43.     dwfOptions3 dd ?
    44.     szDnsSuffix db RAS_MaxDnsSuffix dup (?)
    45.    dwTcpWindowSize dd ?
    46.    szPrerequisitePbk db MAX_PATH dup (?)
    47.    szPrerequisiteEntry db RAS_MaxEntryName + 1 dup (?)
    48.    dwRedialCount dd ?
    49.    dwRedialPause dd ?
    50.    ipv6addrDns RASIPV6ADDR <>
    51.    ipv6addrDnsAlt RASIPV6ADDR <>
    52.    dwIPv4InterfaceMetric dd ?
    53.    dwIPv6InterfaceMetric dd ?
    54.    ipv6addr RASIPV6ADDR <>
    55.    dwIPv6PrefixLength dd ?
    56.    dwNetworkOutageTime dd ?
    57. RASENTRYA ENDS
    Где косяк?
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Как обычно - в неучете выравнивания
     
  7. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    сдурели..