zly argument GetProcAddress

0
#include "stdafx.h"
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
HMODULE handler_libca;
FARPROC adres;

if(argc<3)
	{return 0; }

 
handler_libca=LoadLibraryW((LPCWSTR)argv[1]); 
if(handler_libca==NULL)
	{
	   printf("nie ma takiej dll'ki");

	   return 0;
	 }	

adres=GetProcAddress(handler_libca,(LPCSTR)argv[2]);
if(adres==NULL)
	{
		printf("nie ma takiej procki");

		return 0;
	}

printf("Adres 0x%x",adres);

}

Srodowisko to VS Express 2005
Kod sie kompiluje lecz caly czas dostaje false na 3 if'e
,czyli

if(adres==NULL)

Dopiero kiedy ustawie na sztywno nazwe funkcji np.

adres=GetProcAddress(handler_libca,(LPCSTR)"Sleep");

aplikacja dziala poprawnie.
Problem jest chyba w kodowaniu zmiennej argv[2] UNICODE ,a powinno byc ASCII.

0

No dobra ale po co jawnie wywoływać funkcję Unicode .(LoadLibraryW).
Do kompilacji używa się makra które określa czy program ma być kompilowany
jako Unicode i nikt ręcznie nie będzie wnikał jaka funkcja zostanie wywołana.

To zadanie kompilatora , ty tylko używasz typu zastępującego napisy C
np , zamiast char -> TCHAR i zamiast char* -> TCHAR* .

Definiując makro UNICODE ( #define UNICODE - przed wszystkimi inkludami ) np. w Builder lub VC++
(i dołączając nagłówek tchar.h zestaw funkcji C dla napisów szerokich w razie potrzeby)
kompilator rozwija
makro TCHAR jako znaki szerokie , jaśli tego makra nie zdefiniujesz jako
zwykły char .Można w ten sposób otrzymać wersję Unicode i zwykłą programu .

Niestety nie wszystkie funkcje w bibliotekach są w wersji UNICODE ,
i czasami trzeba zastosować kompilację warunkową , parę #ifdef
w tresci programu , jesli UNICODE do konwertuj napis z wchar_t na char i wywołaj funkcję .
U mnie np. nie ma wersji unicode GetProcAddress :-(
Pomimo że jest LoadLibraryW , program i tak nie działa poprawnie , na moim
kompilatorze napis z wiersza poleceń jest przekazywany jako unicode , - a jak wprowadzić
nazwę .dll z wiersza poleceń jako UNICODE ?.Bez sensu .

1 użytkowników online, w tym zalogowanych: 0, gości: 1