Visual Studio 2012 で単純な C スタイル関数のエクスポートとインポートを実行しようとしています。2 つのプロジェクトを作成しました。私の最終的な目標は、Fortran プログラムから C++ 関数を呼び出すことです。そのため、DLL をできるだけ単純なものにしようとしています。最初のプロジェクトには、次のコードを含む 1 つのファイルが含まれているだけです。
#include <stdio.h>
extern "C" __declspec(dllexport) void __cdecl hello()
{
printf("Hello, World!\n");
}
これは .dll としてコンパイルされます。次に、次のファイルを含む 2 番目のプロジェクトへのリンク入力にそれを含めます。
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 の間のリンクをよりよく理解しているなら、.dll を fortran とリンクするときに /clr が必要ですか (私はそうではないと思います)?