Pracuję nad biblioteką DLL, która będzie używana z innego języka (więc bez importowania bibliotek i włączając nagłówki bibliotek dll) za pomocą _tdcall wywoływania convetion. Problem polega na tym, że VC++ zdaje się zawsze wywoływać pewne ozdoby nazw na eksportowanych symbolach. Wszystkie referencje, które widziałem, mówią o użyciu zewnętrznego "C", ale wydaje mi się, że nadal mam do czynienia z wiodącym podkreśleniem, a @ plus liczbą po wyeksportowanej nazwie.VC++ zapobiega tworzeniu wszystkich symboli o symbolach
Najgorszy bit to zautomatyzowany sposób ładowania bibliotek dll rozszerzenia w języku docelowym, w zasadzie "func_name = GetProcAddress (dll," func_name ")", więc użycie nieodkrytej nazwy GetProcAddress kończy się niepowodzeniem, a używanie ozdobionej nazwy narzeka na nielegalne nazwa zmiennej (@ nie jest dozwolone) :(
Jak mogę dokonać VC++ eksportowej somthing bez ozdób nazwa w ogóle?
extern "C" __declspec(dllexport) int __stdcall test(int x, const char *str);
dumpbin.exe
00011366 _test @ 8 = @ ILT + 865 (_test @ 8)
czy jest powód używania stdcall zamiast cdecl? – CharlesB
W jakim języku jesteś kierowany? Dlaczego 'GetProcAddress' zawodzi, zwraca adres funkcji, a nie nazwę i nie znam języków programowania, które zabraniają używania '@' w ciągach znaków – Djole
patrz http://stackoverflow.com/q/4550294/11343 – CharlesB