요번에 프로그램을 시작했는데요 툴은 dev-cpp를 사용합니다. 그런데 dll를 만들어보려고 여기저기 사이트들을 뒤져봣지만 c함수 형태로 익스포트 한다는 얘기만 있고 class를 통채로 익스포트해서 쓸 수 있게 하는 방법은 안나와있는데요 혹시 방법이 있는지요.
흠.. DLL쪽은 제가 잘 모르지만..
클래스가 불가능하단 얘기는 공유라이브버리와 비슷한것 같아 몇자 적습니다.
C++의 name mangling(?)때문에 공유라이브러리로 클래스를 사용하지 못하는데..
약간 돌려서 (이게 꽁수인지 정수인지도 모르겠네요) 가능하게끔 할 수 있습니다.
class DLClass; extern "C" DLClass *create () { return new DLClass; } extern "C" void destroy ( DLClass *p ) { delete p; }
호출하는 함수에선 공유라이브러리를 열고, create ()함수를 찾아 실행시킨 결과를
DLClass형 포인터 변수로 받을 수 있습니다.
가끔은 밥을 굶어도 살 수 있다.
일반 DLL이 아니고 MFC extension DLL 이었던가 하는 좀 확장된 DLL 규격으로 클래스 export가 가능했다고 예전에 본 기억이 있습니다. VC++에서 가능했었습니다.
별로 도움은 못되는군요. --;
흠.. DLL쪽은 제가 잘 모르지만.. 클래스가 불가능하단 얘기는 공유라이브버리와 비슷한것 같아 몇자 적습니다. C++의 name mangling(?)때문에 공유라이브러리로 클래스를 사용하지 못하는데.. 약간 돌려서 (이게 꽁수인지 정수인지도 모르겠네요) 가능하게끔 할 수 있습니다. class DLClass; extern "C" DLClass *create () { return new DLClass; } extern "C" void destroy ( DLClass *p ) { delete p; } 호출하는 함수에선 공유라이브러리를 열고, create ()함수를 찾아 실행시킨 결과를 DLClass형 포인터 변수로 받을 수 있습니다.
결국 이런 방법이 COM이 아닌가 하는 생각이드네요. ^^
========================= CharSyam ^^ --- 고운 하루 =========================
일반 DLL이 아니고 MFC extension DLL 이었던가 하는 좀 확장된 DLL 규격으로 클래스 export가 가능했다고 예전에 본 기억이 있습니다. VC++에서 가능했었습니다. 별로 도움은 못되는군요. --;
기본적으로는 확장 DLL(MFC에서만 사용가능) 이 아니고서는 class 를
export 할 수가 없습니다. ^^ 그럼 고운 하루...
흠 리눅스에서 dll export가 가능한지 테스트 안해봐서 잘 모르겟습니다.
단 추상화 클래스 방식으로 export는 할 수 잇습니다.
class ITest { public virtual void Test( void ) = 0; } class Test public ITest { virtual void Test( void ) { cout << "Test" << endl; } extern "C" ITest *createTest( void ) { reutrn new Test(); } extern "C" deleteTest( ITest **pTest ) { delete *pTest; *pTest = NULL; }
이런씩으로 해주시면 됩니다.
deleteTest 만들어준 이유는 dll과 프로세스가 힙 메모리 위치가 틀리기 때문에 프로세스에서 죽일려면 에러가 납니다.( Window쪽은 이렇게 되는데 유닉스쪽은 어떻게 될지 잘 모르겠습니다 ^^ );
참조하시기 바랍니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
흠.. DLL쪽은 제가 잘 모르지만..클래스가 불가능하단 얘기는
흠.. DLL쪽은 제가 잘 모르지만..
클래스가 불가능하단 얘기는 공유라이브버리와 비슷한것 같아 몇자 적습니다.
C++의 name mangling(?)때문에 공유라이브러리로 클래스를 사용하지 못하는데..
약간 돌려서 (이게 꽁수인지 정수인지도 모르겠네요) 가능하게끔 할 수 있습니다.
호출하는 함수에선 공유라이브러리를 열고, create ()함수를 찾아 실행시킨 결과를
DLClass형 포인터 변수로 받을 수 있습니다.
가끔은 밥을 굶어도 살 수 있다.
가능합니다.
일반 DLL이 아니고 MFC extension DLL 이었던가 하는 좀 확장된 DLL 규격으로 클래스 export가 가능했다고 예전에 본 기억이 있습니다. VC++에서 가능했었습니다.
별로 도움은 못되는군요. --;
[quote="버그소년"]흠.. DLL쪽은 제가 잘 모르지만..클
결국 이런 방법이 COM이 아닌가 하는 생각이드네요. ^^
=========================
CharSyam ^^ --- 고운 하루
=========================
Re: 가능합니다.
기본적으로는 확장 DLL(MFC에서만 사용가능) 이 아니고서는 class 를
export 할 수가 없습니다. ^^ 그럼 고운 하루...
=========================
CharSyam ^^ --- 고운 하루
=========================
흠 리눅스에서 dll export가 가능한지 테스트 안해봐서 잘 모르겟습
흠 리눅스에서 dll export가 가능한지 테스트 안해봐서 잘 모르겟습니다.
단 추상화 클래스 방식으로 export는 할 수 잇습니다.
이런씩으로 해주시면 됩니다.
deleteTest 만들어준 이유는 dll과 프로세스가 힙 메모리 위치가 틀리기 때문에 프로세스에서 죽일려면 에러가 납니다.( Window쪽은 이렇게 되는데 유닉스쪽은 어떻게 될지 잘 모르겠습니다 ^^ );
참조하시기 바랍니다.
댓글 달기