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
[73553] c#의 dll파일을 c++에서 불러들일때 createInstance에러
낭천 [ktshas] 5111 읽음    2016-04-14 12:00
* 지난글에 답글달아주신 송신영님 감사합니다.

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에러 낭천 5111 2016/04/14
73554     Re:c#의 dll파일을 c++에서 불러들일때 createInstance에러 낭천 5145 2016/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.