DLL에 일반적으로 변수를 저장하는 자체 힙이 있다는 것을 알고 있습니다. 내 DLL 함수는 wchar_t 변수에 대한 포인터를 사용하며 값을 입력하려고 할 때마다 함수, 힙이 파괴되기 때문에 내가 추측하고있는 잘못된 위치를 가리키는 포인터를 남겨 둡니다.DLL 함수의 반환 값
내 DLL 함수가 다시 전달해야하는 일종의 데이터가 나오면 누군가가 그 데이터를 원래 주 함수로 다시 가져올 수있는 방법을 보여줄 수 있습니까? Visual Studio를 사용
2010
편집 : 나는 일부 샘플 코드를 제공 할 수 있지만 단순히 메모리와 관련하여 처리하는 방법에 관한 예/설명 부탁 해요 때문에 나는 점을 보지 못했다 DLL과 그 기능. 필요한 정보가 무엇인지 물어 보면 전달해 보겠습니다.
글쎄, 여러분에게 응용 프로그램이하는 일에 대한 아이디어를 제공하기 위해, 그것은 COM 서버 DLL입니다. 인터페이스는 IProperty이고, 객체는 PropertyObject입니다. DLL은 나에 의해 PropertyObject 메서드로 별도로 만들어졌습니다. 이 메소드 인 Getproperty가 제가 작업하고있는 메소드입니다.
STDMETHODIMP PropertyObject::GetProperty(int arg1, wchar_t* arg2)
{
arg2 = L"Test";
cout << *arg2 << endl;
return S_OK;
}
int main()
{
CoInitialize(NULL);
IClassFactory * pClassFactory = NULL;
HRESULT hr;
hr = CoGetClassObject(
CLSID_PropertyObject,
CLSCTX_SERVER,
NULL,
IID_IClassFactory,
(void **) &pClassFactory);
if (SUCCEEDED(hr))
{
wchar_t x = NULL;
IProperty *pProperty = NULL;
hr = pClassFactory->CreateInstance(NULL, IID_IProperty, (void **) &pProperty);
hr = pProperty->GetProperty(2, &x);
cout << x << endl;
}
return 0;
}
기존 코드가 도움이됩니다. 그러면 우리는 당신이하려고하는 것을 더 잘 볼 수 있습니다. 대부분 쓰기를 시도하기 전에 메모리를 할당하지 못한 것 같습니다. –
확인 http://stackoverflow.com/questions/2266218/memory-heap-management-across-dlls – devshorts
각 DLL에 자체 힙이 있다는 아이디어가 있습니까? 적어도 세 가지 다른 환경에서 DLL을 광범위하게 사용했으며 한 DLL에 할당하는 데 문제가 없었으며 다른 DLL에서 자유롭게 사용했습니다. (하나의 DLL에서 생성하고 다른 DLL에서'dynamic_cast'를 수행하는 데 문제가있었습니다.) –