Простой экспорт стиля c импорта в c

Я пытаюсь сделать простую функцию экспорта и импорта в стиле c в Visual Studio 2012. Я сделал два проекта. Моя конечная цель — вызвать функции c ++ из программы на Фортране, поэтому я пытаюсь сделать dll максимально простым. Первый проект просто содержит 1 файл, который имеет этот код:

#include <stdio.h>

extern "C" __declspec(dllexport) void __cdecl hello()
{
printf("Hello, World!\n");
}

Это скомпилировано как .dll. Затем я включаю это в ссылку ввода для второго проекта, который просто содержит файл с этим:

extern "C" __declspec(dllimport) void __cdecl hello();

int main(int argc, char *argv[])
{
hello();
return 0;
}

Когда я создаю ссылку без поддержки общеязыкового языка, я получаю сообщение об ошибке:

Error   1   error LNK1107: invalid or corrupt file: cannot read at 0x2B8

Если я скомпилирую с общеязыковой поддержкой времени выполнения, я получу ошибку:

Error   1   error LNK1302: only support linking safe .netmodules; unable to link

Чтобы исправить это, интернет хочет, чтобы я компилировал с / clr: pure или / clr: safe, но мой vs говорит мне, что не работает с экспортом в стиле c.

мой вызов командной строки связывания в настоящее время:

/OUT:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.exe" /MANIFEST /NXCOMPAT /PDB:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.pdb" /DYNAMICBASE "c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\*" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /PGD:"c:\users\kevin\documents\visual studio 2012\Projects\Project1\Release\Project2.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\Project2.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

Заранее спасибо за вашу помощь.

Кроме того, если кто-то из вас понимает связь между fortran и c лучше, я хочу, чтобы / clr при создании .dll связывался с fortran (я предполагаю, что нет)?

0

Решение

Общая библиотека состоит из два файлы на винде. .dll и .lib, Вы должны предоставить .lib один в качестве входного линкера, и вы должны поставить .dll в том же каталоге, что и исполняемый файл или где-то в %PATH% во время выполнения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]