아래의 포스팅을 참고하고..
해보던중.. .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상의 문제로, 같은 컴파일러라 가능한듯 하였다.
*/
이 글과 관련있는 글을 자동검색한 결과입니다 [?]