我试图做一个基本的C++ DLL,以便在C#中使用它..下面的类用于:C++ DLL导入到C#应用程序
我的cpp文件
#include "stdafx.h"
#include "MathFuncsAssembly.h"
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw gcnew DivideByZeroException("b cannot be zero!");
}
return a/b;
}
}
我的头文件
using namespace System;
namespace MathFuncs
{
public ref class MyMathFuncs
{
public:
static double Add(double a, double b);
static double Subtract(double a, double b);
static double Multiply(double a, double b);
static double Divide(double a, double b);
};
}
,并在我的C#应用程序,其中我调用库
[DllImport("MathFuncsAssembly.dll")]
public static extern double Add(double a, double b);
static void Main(string[] args)
{
Console.WriteLine(Add(10.0, 11.0));
Console.ReadLine();
}
(Add(10.0,11.0))部件发生异常。抛出以下异常: 尝试装入格式不正确的程序。 (从HRESULT异常:0x8007000B)..任何想法?另外,我复制了C#应用程序的bin文件中的.dll文件...
谢谢!
是DLL文件32还是64位?你的clr是32位还是64位?通常这是与您的错误相关的这种不兼容性。 – alegen
你是这样做的错误方式..如果你有一个ref类(因此也是一个C++/CLI DLL),你根本不需要DllImport:只需在C#项目中添加一个对dll的引用,然后调用函数'的C#方式'即MathFuncs.Add() – stijn
@stijin ...感谢很多队友!:)))多数民众赞成在正确的答案:)) – user1317277