|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 7, 2003 22:54:22 есть относительно большая библиотека, сооруженная из кусков DX SDK, соотв на VC++ 6.0 все работает, переписать ее на асм пока что не смогу и есть идея прилинковать ее к асмовскому проекту .dll (которая работает с нужной программой гораздо лучше)... но допустим из всей этой библиотеки, которая занимается инитом COM, устройства видимозахвата и т.д. нужно вызвать одну функцию например HRESULT Init(void), то как ее надо описать в VC++ и затем в .asm (из которой собирается .dll) чтобы и асм и линкер поняли что надо собрать... пока что пытался засунуть эту функцию в PUBLIC класса, но линкер всеравно ее не видит :/ ... в .asm делаю EXTERNDEF Init: и асемблит нормально без ошибок, а линкер выдает "символ _Init" не найден... includelib вставил, но толку нету :/ ... |
|
|
Дата: Июл 7, 2003 23:06:18 Загляните вовнутрь LIB (хексредактором, например) и узнайте точное имя вашей ф-ции: _Init или __imp__Init@XX или или _imp__Init@XX или ... Далее фиксите это имя в сорсах MASM и всё :-) |
|
|
Дата: Июл 13, 2003 10:24:06 обратный вопрос - вот к .dll собранной в VC++ прикручена .lib, собранная в масме... как объяснить линкеру в VC++, что одна из функций из .lib должна быть доступна для вызова из .dll ? пока что пришлось сделать так:
MMPlyFS proc
...
MMPlyFS endp
в масме, затем в VC++ :
#ifdef FS_DLL_EXPORTS
#define FS_DLL_API __declspec(dllexport)
#else
#define FS_DLL_API __declspec(dllimport)
#endif
extern FS_DLL_API void MMPlyFSC();
void MMPlyFSC();
extern "C"
{
extern void __cdecl MMPlyFS();
}
void MMPlyFSC()
{
MMplyFS()
};
и только после этого до функции MMPlyFS можно добраться через вызов MMPlyFSC, да и то VC++ зачем-то прикручивает проверку ESP после возврата из MMPlyFS, а в .dll имя функции выглядит как ?MMPlyFSC@@YAXXZ :/ ... можно как-нить покороче добираться до функции из асмовой .lib ? т.е. вариант сразу extern FS_DLL_API void MMPlyFS(); не работает :/ : : error C2732: linkage specification contradicts earlier specification for 'MMPlyFS' : see declaration of 'MMPlyFS' загружать две .dll как-то неудобно т.к. загрузку LoadLibrary и вызов GetProcAddress приходится вносить побайтно в исправляемый .exe, и места там немного... |
|
|
Дата: Июл 13, 2003 20:00:42 т.е. вариант сразу Можно, конечно: 1. Создаём функцию в MASM32: testF proc param1:DWORD ret testF endp 2. Компилим и делаем testF.lib (можно оставить testF.obj) 3. Создаём простой проект DLL в VC: test.cpp
--------
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
return TRUE;
}
test.def
--------
LIBRARY test
EXPORTS testF
4. Добавляем testF.lib (или testF.obj) и test.def в дерево файлов. 5. Идём в Project Settings > Link и убираем "Generate debug info" 6. Build и готово! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.034 |