创建C .dll并在C#中使用它

时间:2013-09-04 19:26:23

标签: c# c dll dllimport

作为C#开发者,我正在尝试学习一些C.创建一个C dll然后使用我在C#项目中创建的函数似乎很有趣,只是为了熟悉该语言。

为了开发c dll,我使用DEV-C ++,显然是用于C#Visual Studio。

这是我到目前为止所提出的:

C

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define NAG_CALL __stdcall 
#define NAG_DLL_EXPIMP  __declspec(dllexport)

NAG_DLL_EXPIMP void NAG_CALL Scalars(double, double*);
NAG_DLL_EXPIMP void NAG_CALL Scalars(double in, double *out)
{
  *out = in;
}

在C#中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TestMyOwnCDLL
{
    public static class MyCDLLWrapper
    {
        [DllImport("TestDLL1.dll")]
        private static extern void Scalars(double invar, ref double outvar);

        public static double CallScalars(double invar)
        {
            double outvar = (double)0.0;
            Scalars(invar, ref outvar);
            return outvar;
        }

    }
}

我已将TastDLL1.dll添加到程序集中并标记为“Always copy”。 但是,在调用函数时,我得到一个BadImageFormatException。这意味着找到了dll,但由于某种原因它无法执行dll。

有什么想法吗? 我用过的例子来自: http://www.drdobbs.com/cpp/calling-c-library-dlls-from-c/184406285

亲切的问候。

1 个答案:

答案 0 :(得分:1)

解决了错误: DEVC ++编译器在x64中编译,而c#Application的目标平台设置为x86。将目标平台更改为x64可以解决错误。

现在,是否有可能为C dll编译到AnyCPU?