有两个旧C 文件,其中包含两个相关的标题
为了在Visual Studio 2013中使用它,我从项目属性创建了Visual C++ Win32 Console Application
并禁用了预编译的头文件
我删除了stdafx.h
& targetver.h
& dllmain.cpp
&& project_name.cpp(created by vs)
。
在Header Files
区域,我添加了两个文件。在Source Files
区域,我添加了另外两个文件
我的项目看起来像这样:
[
Here is my entire project's link
考虑.c
个文件扩展名(否.cpp
)
在标头文件中没有class
用法,因为旧的c语言,你会看到很多structs
。
现在我想导出这个项目的dll,以便在一个简单的控制台应用程序c#
项目中使用
怎么办?
我把这段代码放在两个头文件的上面:
__declspec(dllexport) int main();
int main()
函数位于wmm_file.c
文件中,此主函数在另一个c文件(GeomagnetismLibrary.c
)中使用许多函数。
我想在c#代码中使用c ++项目的所有函数
这是我的c#代码(Prpogram.cs
):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Magnetic_Model_CSharp
[DllImport(@"Y:\Magnetic_Model_C_dll_2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int main();
static void Main(string[] args)
{
main();
}
}
}
以下是运行后的错误:
“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();
到
__declspec(dllexport)
在两个头文件中。
现在问题是在int Add(int a, int b);
文件中声明GeomagnetismHeader.h
函数的位置
当我把它放在 typedef struct {之前它起作用
但是当我把它放在 typedef struct {不起作用并且我的所有声明都在 typedef struct {之后。
有什么想法吗?