C#(.net)에서 C의 dll(unmanaged dll) 사용하기.

아래의 포스팅을 참고하고..

해보던중.. .net에서 도 가능하단걸 알았다.

vc++.net (vs8.0)에서 파일을 c로 만들고,,,

#include <stdio.h>
char __declspec(dllexport) * Str = "truth is over there";

int __declspec(dllexport) Inc(int a)
{
 return a+a;
}

int __declspec(dllexport) Add(int a, int b)
{
 return a+b;
}

void __declspec(dllexport) Asdf()
{
 printf("asdf\n");
}
struct __declspec(dllexport) Structest{
 int a;
 int b;
 char s[5];
};


// 이상 testdll.c
// 속성에서. dll로 만들기, clr사용안함. 컴파일
// 만들어진 DLL을 C#프로젝트 bin/debug 폴더로 카피.

----------------------------


C#으로
//test.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;        // InteropServices꼭 필요 (DllImport를 위해)


namespace ConsoleApplication1
{
    class Program
    {
       
        [DllImport("dlltestc.dll")]    // 가져다 쓸 함수마다 적어줘야 한다.
        public static extern int Inc(int a);    // public static extern 필수

        [DllImport("dlltestc.dll")]
        public static extern int Add(int a, int b);

        [DllImport("dlltestc.dll")]
        public static extern void Asdf();

//    c파일에서 선언한 char* str과, struct 는 DllImport가 메소드에만 사용할수 있어서 가져다 쓸수 없었다.
//    뭔가 다른 방법이 있으려나..?

        static void Main(string[] args)
        {
           
            Console.WriteLine("{0} {1}",Add(4,5),Inc(3));    // 그냥 쓰는것처럼 쓰면 된다.
            Asdf();

 

 

        }
    }
}


/////////////////////////
실행결과

9 6
asdf
press any key.




/*
    *. vs6.0에서 만든 c의 dll도 c#에서 사용가능하다

    다만 name managing때문에 extern "C"를 꼭 써줘야 하며, c#에선 Dllimport때문인지.. struct와 변수는 가져다 쓸수 없었다.

ex) extern "C" int __declspec(dllexport) Add(int a, int b) {~~~~}
이렇게 만들어서 컴파일해주어야 함.


    *. vs.6.0 c dll -> vs 6.0 c++ app.에서 사용은 struct와 변수 모두 가능하였다.
       이는 이전 포스팅의 링크문서에서 확인할수 있으며, name managing상의 문제로, 같은 컴파일러라 가능한듯 하였다.
*/

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by -레- | 2007/10/31 22:34 | Programming | 트랙백 | 덧글(0)
트랙백 주소 : http://zubilan.egloos.com/tb/3898123
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



< 이전페이지 다음페이지 >