- HOME
- Post in | and so on/c#
- Post at | 2013. 1. 2. 17:06 | by 밀크빵.
- View comment
c#dll c++에서 사용
- c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace MyEngin
{
[Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]
public interface IManagedInterface
{
int add(int a, int b);
int printHi();
}
[Guid("C6659361-1625-4746-931C-36014B146679")]
public class InterfaceImplementation : IManagedInterface
{
public int add(int a, int b)
{
return a + b;
}
public int printHi()
{
Console.WriteLine("안녕");
return 1;
}
}
}
속성
응용 프로그램 -> 어셈블리 정보-> 어셈블리를 COM에 노출 체크
빌드->COM Interop 등록 체크
visual studio 명령 프롬프트
regasm MyEngin.dll /tlb MyEngin.tlb
- c++
#include <Windows.h>
#include <stdio.h>
#pragma warning (disable: 4278)
#import "MyEngin.tlb" no_namespace named_guids
void main()
{
IManagedInterface *csi=NULL;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation,NULL,CLSCTX_INPROC_SERVER,IID_IManagedInterface,reinterpret_cast<void**>(&csi));
int a=GetLastError();
if(SUCCEEDED(hr))
{
int b=csi->add(2,3); //C# dll에 있는 함수
printf("%d\n", b);
csi->printHi();
getchar();
CoUninitialize();
}
}
* GUID는
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\guidgen.exe로 생성 가능하다
* 다른 PC에서 dll 사용 시 regasm 이용하여 tlb 등록하여야 함
* CoCreateInstance()에서 0x80070002 에러 발생 시
regasm MyEngin /codebase 한 후
c++에서 빌드 하면 됌
'and so on > c#' 카테고리의 다른 글
C# PPT 내용 읽기 (0) | 2013.01.15 |
---|---|
c# 오피스 참조한 프로젝트 배포 시 필요한 dll (0) | 2013.01.07 |
C++ DLL 함수 char*를 C#에서 읽어 오기 (0) | 2012.09.26 |
C# - Excel 내용 읽어오기 (0) | 2012.09.17 |
C# - Excel 창 접근하기 (0) | 2012.09.03 |