C++ 如何导出旧的C dll以便在C#类库中使用
有两个旧C文件,其中包含两个相关的标题C++ 如何导出旧的C dll以便在C#类库中使用,c++,c,dll,export,console-application,C++,C,Dll,Export,Console Application,有两个旧C文件,其中包含两个相关的标题 为了在VisualStudio 2013中使用它们,我创建了 VisualC++ Win32控制台应用程序/COD>,并禁用了Project属性的预编译头文件。 我删除了stdafx.h&targetver.h&dllmain.cpp&项目名称.cpp(由vs创建) 在头文件区域我添加了两个文件,在源文件区域我添加了另外两个文件。 我的项目是这样的: [ 考虑.c文件扩展名(no.cpp)。 在头文件中没有类用法,由于旧的c语言,您将在其中看到许多结构。
为了在VisualStudio 2013中使用它们,我创建了
stdafx.h
&targetver.h
&dllmain.cpp
&项目名称.cpp(由vs创建)
在
头文件
区域我添加了两个文件,在源文件
区域我添加了另外两个文件。我的项目是这样的: [ 考虑
.c
文件扩展名(no.cpp
)。在头文件中没有
类
用法,由于旧的c语言,您将在其中看到许多结构。
现在我想导出这个项目的dll,以便在一个简单的控制台应用程序c#
project中使用。
怎么能做到呢?
我将这段代码放在两个头文件的上部:
__declspec(dllexport) int main();
int main()
函数位于wmm_file.c
文件中,此主函数在另一个c文件(GeomagnetismLibrary.c
)中使用了许多函数。
在C++代码中,我要使用C++项目的所有功能。
这是我的c代码(Prpogram.cs
):
以下是运行后的错误:
类型为“System.AccessViolationException”的未处理异常
发生在Magnetic_Model_CSharp.exe中
如何修复此错误并使该c(c++)项目可导出
编辑:
正如我的朋友所说,你不应该使用main关键字,所以我将其重命名。
对于一个测试,我创建了一个简单的
声明:
int Add(int a, int b); /* PUT IT ON GeomagnetismHeader.h FILE*/
定义:
int Add(int a, int b) /* PUT IT ON wmm_file.c FILE > I RENAMED main() TO main_____() IN THIS FILE*/
{
printf("Hello Joy!\r\n");
return a + b;
}
并将两者重新命名
__declspec(dllexport) int main();
到
在两个头文件中。
现在的问题是intadd(inta,intb);
函数在GeomagnetismHeader.h
文件中的声明位置。
当我把它放在typedef struct{前面时,它可以工作。
但是当我把它放在typedef结构之后时,{不起作用,我所有的声明都放在typedef结构之后{
有什么想法?本教程中,我们可以用类关键字输出C++ DLL(OOP),但是这种情况又如何呢?你不应该在DLL中命名函数<代码>主< /代码>。
__declspec(dllexport) int main();
__declspec(dllexport)