Использование lib, скомпилированного в masm в С++

я пытаюсь сделать библиотеку в masm32 (используя radasm) для использования в других проектах...

исходный код библиотеки:

.386
.MODEL flat,stdcall
option casemap:none
.code
start:
PUBLIC HookProc
HookProc proc addy:DWORD

и для использования в msvc:

extern "C" void* HookProc(void* ptr);
#pragma comment(lib, "TestHook.lib")

однако это вызывает ошибку:

Win32Project1.obj: ошибка LNK2019: неразрешенный внешний символ _HookProc, на который ссылается функция _wmain

но я вижу в библиотеке есть

!<arch>
/               1368690603              0       20        `
®_HookProc@4/               1368690603              0       26        `

Почему msvc не может увидеть этот процесс в библиотеке?? ;/ это как-то связано с @4 ?

Редактировать: изменено на .MODEL flat, c, что избавило от @4, но все же _HookProc uresolved......


person n00b    schedule 16.05.2013    source источник
comment
Можете показать файл сборки? Не обязательно вся функция, достаточно только объявлений. Я предоставил небольшой образец, который я протестировал и работает.   -  person Devolus    schedule 16.05.2013


Ответы (1)


Цена за конверсию:

extern "C" int GetValue(void);

int main(int argc, char*arg[])
{
    char *p = "test";
    int v = GetValue();

    return 0;
}

КАК М:

.486
.model flat, C
option casemap :none

.code

GetValue PROC
    mov eax, 1234
    ret
GetValue ENDP

END
person Devolus    schedule 16.05.2013
comment
на самом деле это работает с .model flat, c, поэтому моя ошибка заключалась в соглашениях о вызовах. - person n00b; 16.05.2013
comment
Что ж, для меня было хорошим упражнением вернуться к сборке. Мне пришлось искать примеры в Google, потому что я столкнулся с той же проблемой. :) - person Devolus; 16.05.2013