ПредишенСледващото

Има няколко DLL, искате да използвате този, в проекта за C ++. Няма достъп до изходния код или разработчиците не съм. Това означава, че при наличието на набор от DLL vesh както в себе си и документ, описващ интерфейса към тях.

настроен 24 Септември '15 в 15:31

По принцип, това е неподдържан сценарий: например, функцията може да бъде украсена по необичаен начин, или да има нетрадиционен конвенция призвание.

Независимо от това, ако знаете точната функция подпис, можете да се опитате да направите, както е описано тук.

№1 Идеята: да се създаде DEF-файл ръчно. Той е подходящ, ако функциите, които се внасят, са С-функции, и вие знаете своето призвание конвенция (например __cdecl или Паскал (__stdcall)).

За начало, ние се установи каква функция. Можете да използвате стандартната полезността dumpbin ключ / износа (не забравяйте, че трябва да бъде стартирана от Visual Studio командния ред) или много полезно за развитието на родния Windows-базирани платформи depends.exe полезност.

За dumpbin получавате продукция по този начин:

От тук можете да вземе имената на функции: AnalyseW. CloseAnalyseW т.н. и да ги превърне в .def-файл ..:

Така че работи за функциите, призоваващи конвенция __cdecl (това обикновено е по подразбиране). За други, трябва да се украсяват името на функцията самостоятелно, в съответствие с таблицата:

(Броят след @ е броя на байтовете в купчината да бъде разрешено при параметрите).

Сега можете да използвате неограничено /def:yourfile.def от команден ред Visual Studio, за изграждане на .lib и .exp да се свържат.

Идеята №2 - е да се създаде фалшива библиотека със същата функция подписа, за да го построи, и да го използвате вместо .lib и .exp липсва. За да направите това, вие трябва да се изгради C (или по-лошо, C ++ -) подписи, необходими функции. За sishnyh функции (или тези, които са били идентифицирани като ученик "C" в източника), тя е проста: погледнете украсени името (например, в същата или depends.exe dumpbin), определи горната част на таблицата на повикване конвенция, и поставя тази функция в изходния код. Не забравяйте да посочите __declspec (dllexport) за всички, и допълнително ученик "C" за sishnyh функции. Изпълнение на функциите, колкото искате, така че компилаторът се компилира.

Ако украсени C ++ - подписи (те изглежда подобно на този тест @@ YGXXZ.) Те могат да бъдат превърнати в правилната C ++ - декларация, използвайки undname полезност:

Ако имате глава, ще библиотеката, няма нищо да се отгатне (с риск да се направи грешка и да получите катастрофа) не трябва просто да си вземе функцията прототипи от там (просто не забравяйте да смените __declspec (dllimport) на __declspec (dllexport)).

Съставете получения файл в .obj с командата

Ключ / C е необходимо, така че компилаторът е направила .obj и / Ob0 - така че да не случайно zanilaynil всички функции, които тя може да изглежда излишно (може да е необходимо в случай на износ класове, и във всеки случай няма да боли).

Като .obj, можете да получите .lib и .def с командата

Свързани статии

Подкрепете проекта - споделете линка, благодаря!