예, IDL (또는 매우 근접한 항목)을 리버스 엔지니어링하거나 디스 어셈블 할 수 있습니다. 당신이해야 할 것은 자신에게
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
의 기본 코드를 제공하는 새로운 C++ 콘솔 프로젝트를 제공하고 당신은 #include 구문 아래 # import 문을 삽입합니다. 그래서 저는 C# 어셈블리를 COM Interop DLL로 작동하도록 마크 업했습니다. ComExample2라고 부르며, C++ 콘솔 프로젝트와 같은 솔루션에 있습니다. 이는 내가 추가 한 좋은 상대 경로 이름을 사용할 수 있음을 의미합니다. 그래서 # import 문은 다음과 같습니다.
#import "..\ComExample2\bin\Debug\ComExample2.tlb" no_namespace named_guids
콘솔 응용 프로그램을 빌드합니다. 빌드하는 동안 생성 된 파일을 조사하면 형식 라이브러리 헤더를 나타내는 .TLH로 끝나는 파일을 찾을 수 있습니다. 따라서 내 경로는
..\ComExample2\ConsoleApplication1\Debug\comexample2.tlh
내 안에 있습니다. 내 파일에는 idl과 매우 흡사합니다. 다음은이 모든 코드를 생성
struct __declspec(uuid("515b1b18-1602-4d42-b743-f1b3c458a0d0"))
/* LIBID */ __ComExample2;
struct /* coclass */ ComExampleClass2;
//
// Type library items
//
struct __declspec(uuid("713007fe-e74c-4fec-b91a-5ef8df279929"))
IFoo : IDispatch
{
//
// Wrapper methods for error-handling
//
_bstr_t Greeting ();
long Sim (
long a,
long b);
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall raw_Greeting (
/*[out,retval]*/ BSTR * pRetVal) = 0;
virtual HRESULT __stdcall raw_Sim (
/*[in]*/ long a,
/*[in]*/ long b,
/*[out,retval]*/ long * pRetVal) = 0;
};
struct __declspec(uuid("efe233b5-8ab3-4414-855e-1f027e0a72d5"))
ComExampleClass2;
// interface _Object
// [ default ] interface IFoo
당신에게 맛을 제공하기 위해 편집 한 조각이 .... 당신이 쉽게 COM 라이브러리에 대한 스크립트 C++ 코드를 할 수 있도록. 당신은 당신이 필요로하는 것을 골라야 만 할 것이지만, 그것으로 충분해야만합니다.
종류와 관련,
주 바텐
[tlbexp.exe]를 살펴 보자 (http://msdn.microsoft.com/en-us/library/hfzzah2c.aspx는) – paulsm4
아닌가요 NET 어셈블리에만 해당됩니까? [ComVisible] –
아니요, 혼잡 한 축구 경기장에서 도움을 청합니다. 어딘가에 프로그래머가있어 필요한 것을 정확히 제공 할 수 있습니다. 당신이 여기에서 그를 찾을 확률은 zilch입니다. 전화를 받고 전화를 겁니다. 그가 돕고 싶지 않다면 그것이 끝나는 곳입니다. –