0

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

敬具。

4

1 に答える 1

1

次のエラーを解決しました: c# アプリケーションのターゲット プラットフォームが x86 に設定されている場合、DEVC++ コンパイラは x64 でコンパイルされます。ターゲット プラットフォームを x64 に変更すると、エラーが解決します。

さて、C dll 用の AnyCPU にコンパイルする可能性はありますか?

于 2013-09-04T19:31:03.650 に答える