2013-09-04 2 views
0

C#을 개발하는 분으로서 저는 지금 C를 배우려고합니다. C 언어로 익숙해지기 위해서 C DLL을 만들고 C# 프로젝트에서 만든 함수를 사용하는 것이 재미있을 것 같았습니다.C에서 .dll을 생성하고 C#에서 사용하기 #

C DLL을 개발하는 데는 DEV-C++을 사용하고 C# Visual Studio에는 분명히 사용합니다.

내가 지금까지 가지고 올 한 것입니다 :

#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#에서

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

친절에 감사드립니다.

답변

1

오류를 해결했습니다 : DEVC++ 컴파일러는 x64로 컴파일되지만 C# Application의 대상 플랫폼은 x86으로 설정되었습니다. 대상 플랫폼을 x64로 변경하면 오류가 해결됩니다.

이제 C DLL 용 AnyCPU로 컴파일 할 수 있습니까?

+0

아니요. 모든 CPU는 .NET 관련 개념입니다. –

+0

그것은 심지어 내가 x86을 컴파일 할 수없는 것 ... 32 비트 컴파일러를 chosing 내게 오류를 제공합니다 – KenGey

관련 문제