C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[73554] Re:c#의 dll파일을 c++에서 불러들일때 createInstance에러
낭천 [ktshas] 5145 읽음    2016-04-14 13:32
자답.

해결 되었습니다...해결 되었는데 왜 해결된지는 모르겠습니다 ㅠ..
에러가 안나게 된 뒤로 ctrl z로 뒤로 돌려봐도 확실히 잘못쓴건 없었는데...
C# 모듈하고 라이브러리를 재빌드 하고 나서부터인건지 언제부터인건지 아무튼 갑자기 고처젔습니다 흠...;;

질문 삭제할까 하다가 그냥 정보 겸 해서 남겨두겠습니다.

낭천 님이 쓰신 글 :
: * 지난글에 답글달아주신 송신영님 감사합니다.
:
: c++로 메일송신하는게 참...-_-...보내는거까지 했더니 결국 영어아니면 글자가 다 깨저서 그거까지 일일이 만들바에는 걍 c#으로 메일송신 프로그램 만들어서 c++에서 불러다 쓰는게 10배는 빠를 것 같아 시도중입니다.
:
: 아무튼 연습용으로 인터넷 검색하면서 c#프로그램을 만들고  COM참조가능으로 설정 한 후 컴파일해서 dll파일을 만들었습니다.
: dll파일을 regasm을 이용해서 tlb파일을 얻었구요.
:
: 그 다음 이 dll파일과 tlb파일을 c++프로젝트 폴더에 두고, c++ 소스에서 import "SendMail.tlb"를 적고 빌드를 실행했더니
: Debug폴더에 SendMail.tlh & tli파일이 생겼습니다.
:
: 여기까진 잘 되는 것 같았는데요...
: c++에서 CoCreateInstance  라는걸 해야하는 것 같은데...여기에서 에러가 납니다.
: 먼저 c#프로그램의 소스입니다.
:
: using System.Runtime.InteropServices;
: 
: namespace SendMail
: {
:     [Guid("A5A420C2-F419-4063-B9A8-FC45737A2B37")]
:     public interface MailInterface
:     {
:         int add(int a, int b);
:     }
: 
:     [Guid("FC979228-1F8B-4D04-8CD8-546B0B64E616")]
:     public class MailCtrl : MailInterface
:     {
:         public int add(int a, int b)
:         {
:             return a + b;
:         }
:     }
: }
: 

:
: 그리고 c++의 헤더와 cpp파일의 소스입니다.
:
: #include "stdafx.h"
: 
: struct MailInterface;
: 
: class Mail
: {
: public:
: 	Mail(void);
: 	~Mail(void);
: 	int add(int a, int b);
: private:
: 	MailInterface *mailInter;
: };
: 

:
:
: #include "stdafx.h"
: #include "Mail.h"
: #include 
: #include 
: #include 
: 
: #import "SendMail.tlb" no_namespace named_guids
: 
: using namespace std;
: 
: Mail::Mail(void)
: {
: }
: Mail::~Mail(void)
: {
: }
: 
: int Mail::SendMail()
: {
: 
: 	CoInitialize(NULL);   
:     HRESULT hr = CoCreateInstance(CLSID_MailCtrl,    
:                                NULL,    
:                                CLSCTX_INPROC_SERVER,    
:                                IID_MailInterface,    
: 				reinterpret_cast(&mailInter));   
: }
: 

:
: 에러가 나는곳은 마지막 소스의 CLSID_MailCtrl와 IID_MailInterface입니다.
: SendMail.tlh파일을 열어보니까 아래와 같은 내용이 있었기 떄문에...맞게 적은 것 같은데..
: // Named GUID constants initializations
: //
: extern "C" const GUID __declspec(selectany) LIBID_SendMail =
:     {0xc4404f0c,0x77ca,0x4a20,{0x92,0x09,0x3f,0x86,0x1a,0x70,0x68,0xde}};
: extern "C" const GUID __declspec(selectany) IID_MailInterface =
:     {0xa5a420c2,0xf419,0x4063,{0xb9,0xa8,0xfc,0x45,0x73,0x7a,0x2b,0x37}};
: extern "C" const GUID __declspec(selectany) CLSID_MailCtrl =
:     {0xfc979228,0x1f8b,0x4d04,{0x8c,0xd8,0x54,0x6b,0x0b,0x64,0xe6,0x16}};
: extern "C" const GUID __declspec(selectany) IID__MailCtrl =
:     {0x25109ceb,0xbac9,0x378f,{0xbc,0xad,0x5b,0x2c,0xe3,0xd8,0x3f,0xa5}};
:
: 참고하고 있는 사이트들과 같게 쓴 것 같은데 왜 에러가 나는지 잘 모르겠습니다...
: 도움좀 주실 수 있으면 감사하겠습니다.
:
: 참고사이트
: http://silverlab.tistory.com/12
: http://tiger5net.egloos.com/5510639

+ -

관련 글 리스트
73553 c#의 dll파일을 c++에서 불러들일때 createInstance에러 낭천 5112 2016/04/14
73554     Re:c#의 dll파일을 c++에서 불러들일때 createInstance에러 낭천 5145 2016/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.