[Visual Studio] Aplikacja wielojęzykowa (stringi w DLL)

0

Witam
Korzystam ze środowiska Visual Studio, chciałbym stworzyć wielojęzykową wersję mojego programu.

Obecnie używam w nim StringTable, w której zapisane są wszystkie łańcuchy użyte w programie.

Chciałbym przenieść te Stringi do biblioteki dll i ładować je z niej.

Jaką funkcję użyć do wczytania takiej biblioteki do programu i jak załadować z niej stringi?

0

LoadLibrary a do zwolnienia FreeLibrary
wystarczy zrobić funkcję zwracającą wskaźniki na tekst, w DLLce zrób tak

char* StringTable[]=
{
  "tekst 1", //0
  "blablabla", //1
  "i reszta" //2
};

a funkcja zwracająca wskaźnik:

extern "C" char* __declspec(dllexport) GetString(unsigned int number)
{
  if(number<3) return StringTable[number]; else return NULL;
}

Tyle, że w ten sposób char będą const, więc nie możesz ich zmieniać...
Jeszcze w programie po załadowaniu bliblioteki będziesz musiał zaimportować tą funkcję:

typedef char*(__declspec* TypeGetString)(unsigned int);
TypeGetString GetString;

HINSTANCE hLib=LoadLibrary("biblioteka.dll");
if(hLib)
{
  GetString=(TypeGetString)GetProcAdress(hLib,"GetString");
  if(GetString!=NULL) MessageBox(NULL,"funkcja poprawnie załadowana","sukces",MB_OK);
}
//użycie funckji
cout<<GetString[1]<<endl;//wyświetli tekst numer 1 czyli blablabla
//po zakończeniu pracy z biblioteką
FreeLibrary(hLib);
hLib=NULL;

0
AZed1 napisał(a)

Chciałbym przenieść te Stringi do biblioteki dll i ładować je z niej.

proponuje nie wywalac tablicy do .dll'ki, tylko zapiasc wszystkie napisy do jakiegos pliku tekstowego o ustalonym formacie (np. xml, jako seria key-value) i w aplikacji na starcie wczytac sobie wartosci do tablicy stringow.. bedziesz mial ten wielki plus, ze bedziesz mogl tłumaczyć/zmieniać teksty bez tworzenia/rekompilowania dll'ek

0
typedef char*(__declspec* TypeGetString)(unsigned int);

tutaj zrobiłem błąd, powinno być __stdcall oczywiście zamiast __declspec

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