【问题标题】:creating C .dll and using it in C#创建 C .dll 并在 C# 中使用它
【发布时间】:2013-09-04 19:26:22
【问题描述】:

作为一名 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 添加到程序集中并标记为“始终复制”。 但是,当调用该函数时,我得到一个 BadImageFormatException。这意味着找到了dll,但由于某种原因无法执行dll。

有什么想法吗? 我使用了以下示例: http://www.drdobbs.com/cpp/calling-c-library-dlls-from-c/184406285

亲切的问候。

【问题讨论】:

    标签: c# c dll dllimport


    【解决方案1】:

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

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

    【讨论】:

    • 没有。任何 CPU 都是特定于 .NET 的概念。
    • 看来我什至无法编译 x86... 选择 32 位编译器会出现错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多