|
Lyn 님이 쓰신 글 :
: 그럴리가요
:
: 뭔가 잘못햇겟죠
:
: 김보람 님이 쓰신 글 :
: : 안녕하세요 요번에 새로 가입하게 된...
: :
: : 아무개 입니다 네!! 회원님들 더운데 건강관리 잘하셔서 별일 없으셨으면 하는 작은 바램이 있습니다.
: :
: : 이렇게 글을 적게 된 건 리눅스에 QT라는 개발툴이 있는데요
: :
: : QT 로 DLL 을 만들었습니다 그래서 테스트할겸 비주얼 스튜디오로 돌렸는데 아무 이상이 없었습니다
: :
: : 그런데 이 DLL 을 볼랜드로 가져오니까 대충
: :
: : Exception class EAccessViolation with message 'Access Violation'.
: :
: : 대충 저런 오류가 뜨는데 한줄 한줄 return 문 써서 확인하다보니
: :
: : new 에서 걸리더군요
: :
: : 제가 아는게 워낙 얕고 해서 회원님들께 여쭙습니다
: :
: : 볼랜드에서는 dll 안에 new 하는게 허용되지 않는가요?
: :
: : 혹시 아시는분 있으시면 답변 주시면 감사합니다
: :
: : 더운데 프로그램 작업하시느라 수고 많으십니다 회원님들이 원하는 결과를 얻길 빌며 글을 줄이겠습니다
: :
: : 덧붙임 : 제가 DLL 을 가져와서 사용하려는 프로그램을 작성하는 개발툴은 RAD Studio 2010 입니다
답변 주셔서 일단 감사드립니다
제가 진짜 잘 모르겠는데요 테스트 할겸 프로젝트를 생성하였습니다 염치 없지만 한번 봐주시고 이상한거 있는지 봐주시면 정말 도움이 많이 될거 같습니다
일단 DLL 프로젝트입니다
///////////////////////////////////////////////////////////////////////////////
newindll_testproject.h
#ifndef NEWINDLL_TESTPROJECT_H
#define NEWINDLL_TESTPROJECT_H
#include "newindll_testProject_global.h"
extern "C" class NEWINDLL_TESTPROJECTSHARED_EXPORT Newindll_testProject {
public:
Newindll_testProject();
char *p;
};
extern "C" NEWINDLL_TESTPROJECTSHARED_EXPORT int test();
#endif // NEWINDLL_TESTPROJECT_H
////////////////////////////////////////////////////////////////////////////////
newindll_testproject_global.h
#ifndef NEWINDLL_TESTPROJECT_GLOBAL_H
#define NEWINDLL_TESTPROJECT_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(NEWINDLL_TESTPROJECT_LIBRARY)
# define NEWINDLL_TESTPROJECTSHARED_EXPORT Q_DECL_EXPORT
#else
# define NEWINDLL_TESTPROJECTSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // NEWINDLL_TESTPROJECT_GLOBAL_H
/////////////////////////////////////////////////////////////////////////////////
newindll_testproject.cpp
#include "newindll_testproject.h"
Newindll_testProject::Newindll_testProject()
{
// p = new char[10];
}
extern "C" NEWINDLL_TESTPROJECTSHARED_EXPORT int test()
{
char *p;
p = new char[10];
return 0;
}
//////////////////////////////////////////////////////////////////////////////////
이렇게 빌드하였구요 빌드한 컴파일러는 MSVC 2008 버전입니다
위에 DLL 을 가져다 쓴 소스는
/////////////////////////////////////////////////////////////////////////////////
File1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#include <stdio.h>
typedef void *HANDLE;
typedef int (__stdcall *g_test)();
typedef int (__stdcall *g_test)();
extern "C" __declspec(dllimport) void __stdcall test();
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
bool bResult=false;
HMODULE hDll;
hDll = LoadLibraryEx("newindll_testProject.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
if(hDll == NULL)
{
printf("[Err] Fail to get dll [%d]\n", GetLastError());
return -1;
}
g_test test;
test = (g_test) GetProcAddress(hDll, "test");
if(test == NULL) printf("Fail to get test\n");
else printf("Success to get test\n");
test();
FreeLibrary(hDll);
return 0;
}
////////////////////////////////////////////////////////////
이렇게 입니다 MSVC2008 을 통해 빌드한 DLL 은 implib 라는 파일을 이용해 lib 를 생성하고 프로젝트에 추가하였습니다
그런데 오류가 Exception class EAccessViolation with message 'Access Violation'. 역시나 이렇게 발생합니다
제가 혹여나 빠뜨린거 있는지요..?
답변주시면 정말 큰힘이 될듯 합니다.
|