먼저 Visual Studio에서 C++ Win32 DLL 프로젝트를 만든다.
그리고 아래 코드를 넣고 빌드한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
extern "C" __declspec(dllexport) void getSTRING_call_by_value(const char* val)
{
	printf("%s \n", val);
}
extern "C" __declspec(dllexport) void getSTRING_call_by_reference(char* buf, int size)
{
	const char *cstr = "Hello World!";

	if( size < strlen(cstr)+1 ) {
		buf = NULL;
		return;
	}

	sprintf(buf, cstr);
}



다음으로 Visual Studio에서 C# Console Application프로젝트를 만든다.

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;


class DllWrapper
{
    [DllImport("test_c_dll.dll")]
    public static extern void getSTRING_call_by_value(string val);

    [DllImport("test_c_dll.dll")]
    public static extern void getSTRING_call_by_reference(StringBuilder val, int len);
}

class Program
{
    static void Main(string[] args)
    {
        DllWrapper.getSTRING_call_by_value("Hello World!");

        StringBuilder sb = new StringBuilder(1024);
        DllWrapper.getSTRING_call_by_reference(sb, sb.Capacity);
        Console.WriteLine(sb);
    }
}

Output:
1
2
Hello World!
Hello World!



2011/11/04 - [C# .NET] - [C#] PInvoke 1탄. 데이터 타입 변환표
2011/11/04 - [C# .NET] - [C#] PInvoke 2탄. Normal Data Type
2011/11/04 - [C# .NET] - [C#] PInvoke 3탄. String 타입
2011/11/04 - [C# .NET] - [C#] PInvoke 4탄. ByteArray
2011/11/04 - [C# .NET] - [C#] PInvoke 5탄. Callback Function

+ Recent posts