簡體   English   中英

獲取IDropTarget並拋出HWND引發0xC0000005訪問沖突

[英]Get IDropTarget with HWND throw 0xC0000005 access violation


我正在嘗試模擬拖放操作,以使用IDropTarget接口通過C ++代碼(或.NET)將文件拖放到另一個應用程序中。
我已經閱讀並測試了不同的解決方案。 我有一些代碼來刪除可以使用鼠標的文件。
但是此代碼應該可以引發訪問沖突異常。
你有解釋嗎? 謝謝。

W7 64Bits,VC6,VS2013 C ++存在相同問題。

stdafx.h
#include <stdio.h>
#include <tchar.h>
#include <oleidl.h>
#include <Atlbase.h>

TestDragDrop.cpp
#include "stdafx.h"
IDropTarget* GetRegisteredDropTargetFromWnd(HWND hWnd)
{
    IUnknown *pBuffer = (IUnknown *)GetProp(hWnd, TEXT("OleDropTargetInterface"));
    if (pBuffer != NULL) // pBuffer = address can see on properties tab with WinSpy++
    {        
        IDropTarget *pRetVal = NULL;
        // throw exception 0xC0000005 acess violation
        if (SUCCEEDED(pBuffer->QueryInterface(IID_IDropTarget, (void **)&pRetVal)))
            return pRetVal;
    }
    return NULL;
}
int main(int argc, char* argv[])
{
    CoInitialize(NULL);
    HWND hWnd = (HWND)0x00181E04;  // get with WinSpy++ 
    IDropTarget* pDT = GetRegisteredDropTargetFromWnd(hWnd);
    CoUninitialize();
    return 0;
}

謝謝Hans Passant的充分理由。 我嘗試通過以主要形式添加控件並編寫此代碼的另一種方式

DataObject daobj = new DataObject();
StringCollection strcol = new StringCollection();
strcol.Add("F:\\test.jpg");
daobj.SetFileDropList(strcol);
IDropTarget dt = (IDropTarget)ctrl;
dt.OnDragDrop(new DragEventArgs(daobj, 0, 0, 0, DragDropEffects.Copy, DragDropEffects.Copy));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM