DLL には通常、変数を格納する独自のヒープがあることを理解しています。私の DLL 関数は wchar_t 変数へのポインターを受け取り、それに値を入れようとすると、単純に関数を終了し、ポインターを指すポインターを残します。私が想定している悪い場所は、ヒープが破壊されるためです。
私の 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;
}