Я пишу программу для преобразования изображения и сравнения скорости обработки данных в C и сборке. У меня есть 3 проекта:MASM: Доступ к глобальной переменной C из сборки
- главный проект в C
- DLL в C, чтобы преобразовать изображение
- DLL в ASM, чтобы преобразовать изображение
В заголовке DLL C, я просто написал:
#ifdef PROJEKTC_EXPORTS
#define PROJEKTC_API __declspec(dllexport)
#else
#define PROJEKTC_API __declspec(dllimport)
#endif
...
extern PROJEKTC_API unsigned int ThreadID;
PROJEKTC_API void __cdecl funkcjaC(void* Args);
и после включения этого заголовка я могу получить доступ к переменной ThreadID как в основном проекте, так и в C DLL.
Проблема начинается, когда я пытаюсь сделать то же самое в ASM. Я пробовал конструкции вроде extern ASMThreadID:dword
в блоке .code, но это не сработает.
ошибка я получил: error LNK2019: unresolved external symbol _ASMThreadID referenced in function _MyProc1
У меня есть ощущение, что это вопрос 1-2 строк кода, но я не могу понять, какие инструкции я должен использовать.
Я связываю проекты по файлу определения модуля в ASM и добавляю файл ASM.lib в Linker-> Input основного проекта.
Есть ли у вас какие-либо предложения?
Скомпилировать версию C библиотеки DLL, собрать компилятор, и посмотреть, как это делается на нашей платформе? Этот материал зависит от реализации. – EOF
Вы имеете в виду Демонтаж окна? Я использую Visual Studio 2010 в Windows 7 64-bit, к сожалению, он не показывает сборку для этой части кода ... Я имею в виду, в C DLL .c файле у меня есть глобальная переменная: PROJEKTC_API unsigned int ThreadID = 0; и он работает блестяще. К сожалению, я не знаю, как экспортировать переменную из ASM в C. Где и как мне объявить переменную, чтобы она экспортировалась за пределы DLL. Как использовать __declspec (dllexport) в сборке. – Trimack
C иногда добавляет символы подчеркивания к имени. Вы пытались просто добавить подчеркивание, когда объявляете переменную в asm? И вы объявляете его «публичным» в своем asm, да? –