【发布时间】: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
亲切的问候。
【问题讨论】: