ドロップファイルを行いたい

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ドロップファイルを行いたい

by イグトランス » 2007年9月04日(火) 20:10

基のC++コードからそうなのですが,ここでGlobalAllocにGMEM_ZEROINITだけを指定しているのは良くないです。MEM_MOVEABLEを併せて指定するのが正しいです(少しくらい間違っていても動いてしまうのがWindowsの凄いところですが)。

そして,このコードでは確保したメモリの全てに書き込みを行うため,GMEM_ZEROINITは不要で,結局MEM_MOVEABLEだけを指定すればよいです。

ちなみに,*p='\0'に当たるのはSetByte(p, 0)で,size++はForの外で構いません。

Re: ドロップファイルを行いたい

by 7 » 2007年9月04日(火) 17:56

> あるウィンドウハンドルにファイルをドロップするC++サンプルがあるのですが、
> それをActiveBasicで行いたいと考えています。
> どのように書き直せばよいのでしょうか?
> よろしくお願いします。
個人的に思ってることですが、VBから移植するよりC++から移植する方が簡単です。ライブラリとか使われてるコードだとC++環境が無いので訳分かりませんが...。
こんな感じではないでしょうか?

ドロップファイルを行いたい

by TAKO(AB初心者) » 2007年9月04日(火) 13:31

あるウィンドウハンドルにファイルをドロップするC++サンプルがあるのですが、
それをActiveBasicで行いたいと考えています。
どのように書き直せばよいのでしょうか?
よろしくお願いします。
--------C++のサンプル
const char *FileNameList[]={
"c:\\autoexec.bat",
"c:\\config.sys",
NULL,
};

// ファイル名の記述に必要なメモリ量を計算
int size=0;
for(int i=0;FileNameList;i++)
size+=strlen(FileNameList)+1;
size++;
HANDLE hMem=GlobalAlloc(GMEM_ZEROINIT,sizeof(DROPFILES)+size);
char *p=(char *)GlobalLock(hMem);
DROPFILES *DropFiles=(DROPFILES *)p;
DropFiles->pFiles=sizeof(*DropFiles);
DropFiles->pt.x=10;
DropFiles->pt.y=10;
DropFiles->fNC=1;
DropFiles->fWide=0;
p+=sizeof(*DropFiles);
for(int i=0;FileNameList;i++)
strcpy(p,FileNameList);
p+=strlen(p)+1;
}
*p='\0';
GlobalUnlock(hMem);
::PostMessage(hWnd,WM_DROPFILES,(WPARAM)hMem,0);
----------------------

ページトップ