在Visual Studio中制作适合由Mozilla中的js-ctypes使用的C DLL

时间:2013-11-26 15:49:39

标签: c visual-studio-2012 dll jsctypes

正如主题所说,我尝试做的与this类似,但使用的是Visual Studio 2012。

我可以构建和生成DLL,我可以在javascript中加载该DLL,但我无法访问该DLL中的函数。查看DllExp中的DLL显示没有函数,表明DLL有问题。

DLL是使用“Empty Project”模板创建的新C ++项目。值得注意的设置是;

常规 - >配置类型设置为DLL
没有优化。
没有预编译的标题。
编译为C代码
调用约定__cdecl

编译和链接的命令行,如果有一个我认为不重要的设置,

 /GS /TC /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc110.pdb" /fp:precise /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\StreamInterop.pch" 

对于链接器

 /OUT:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.dll" /MANIFEST /NXCOMPAT /PDB:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /IMPLIB:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.lib" /DEBUG /DLL /MACHINE:X86 /INCREMENTAL /PGD:"C:\Work\VehicleTracker-DotNet\StreamInterop\Debug\StreamInterop.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\StreamInterop.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBI

该项目包含一个C源文件main.c,其中包含

 #include<stdio.h>
 int add(int a,int b)
 {
     return(a+b);
 }

鉴于这是前一篇文章中所需的全部内容,在我看来问题必须出现在编译器或链接器开关中。谁能看到我错过的东西?

1 个答案:

答案 0 :(得分:1)

在使用Visual Studio的Windows上,要从DLL导出函数,请使用:

 #include<stdio.h>
 __declspec(dllexport) int add(int a,int b)
 {
     return(a+b);
 }

作为旁注,请不要选择Empty Project,以便Visual Studio为您生成一些示例代码。