都是“类型”惹的祸!!!(200分)

  • 主题发起人 主题发起人 yyhhnn
  • 开始时间 开始时间
Y

yyhhnn

Unregistered / Unconfirmed
GUEST, unregistred user!
大家知道,API函数SENDMESSAGE,在DELPHI返回值是LONGINT;<br><br>由于C++可以这样写代码:<br><br>char *name=SendMessage(hwnd, WM_USER, DATA,userdefine);//任意一条SENDMESSAGE函数调用<br><br>这条函数的意思是将消息执行后返回给一个字符指针,C++由此可以获得一个字符串NAME;<br><br><br>我的问题是,在DELPHI中,由于赋值相容性,上诉的写法肯定是错误的,怎样写代码才能<br>完成上述同样的功能,得到一个STRING类型的变量?(该变量的值是NAME字符串)<br>
 
有人知道吗?
 
同一个进程中自发消息可以:<br>var<br>&nbsp; name: PChar;<br>begin<br>&nbsp; name := Pointer(SendMessage(hwnd, WM_USER, DATA,userdefine));<br>end;<br><br>不过我认为这样做不好,<br>而且如果你是两个进程间交换消息的话,<br>通过此指针有可能根本不能访问那个字符串,<br>因为在WIN32中各进程的地址空间是虚拟的。<br><br>如果多进程,考虑DDE吧!<br>
 
name:pchar;<br><br>name:=pchar(SendMessage(hwnd, WM_USER, DATA,userdefine));
 
好像还是不行啊<br><br>我用了两位大哥的方法,然后把name转化成PASCAL式的字符串,strpas(name);<br>结果每次都出现异常!<br><br>怎样把一个pchar型的指向字符串首址的字符串指针,所指向的内容(即字符串内容,如<br>上面NAME 像 SMITH ,TOM,MIKE)赋值给一个PASCAL的字符串?(STRING)<br>即 &nbsp; STRING STR_name:=‘TOM’<br><br>PCHAR的值其实是一个地址(所指向字符串的首址)阿!<br><br>
 
还有,SendMessage(hwnd, WM_USER, DATA,userdefine)返回的整数值,在这里是不是<br>可以理解为字符串的地址值???
 
我的这条消息的定义是<br>int ret=SendMessage(hwndWinamp,WM_USER, data, id); <br>英文帮助解释如下:<br>Retrieves (and returns a pointer in 'ret') a string that contains the filename ;<br>Returns NULL if error, or if 'data' is out of range<br><br>附带的例子是(C++):char *name = SendMessage(hwnd, WM_USER, index, IPC_GETFILE);<br><br><br>我就是想把文件名通过消息触发(IPC_GETFILE)取得,赋值给一个STRING变量,使得在<br>DELPHI中可以使用<br><br>
 
你这是WinAMP的调用吧?IPC_GETFILE=211?<br><br>这些消息是plug-in only的,不能在外部程序中调用,<br>原因上面坏蟑螂提到了,那个指针对于其他进程是无意义的<br><br>如果你已经作成了plug-in,那出错原因就不得而知了
 
TO:温大侠<br>1。如果这些消息不是plug-in only的,可以再外部程序中调用,那么两位刚才说的方法<br>是不是就对了??<br>2。佩服,一看就看出这是WINAMP的消息,这种方法不能获得当前正在播放的MP3的文件名称<br>那么,在DELPHI中,即在外部程序中,怎样获得当前正在播放的MP3的文件名称和路径了??<br>3。怎样获得WINAMP当前的播放列表(PLAYLIST)??要根据添加删除情况更新!!(分数可以另外给)<br><br>万分感谢!!!!!我会给分没商量的!!(可以另外给分)
 
1.逻辑上可以这么说,实际上没意义,你要看清楚这个问题的原因,<br>应该反过来讲:因为是返回字符串的调用,所以只能是plug-in only的。<br>2.不知道<br>3.不知道
 
温大侠,等会给你分!!<br><br><br><br>上述2,3问题, &nbsp;有谁知道啊????????????????????
 
多人接受答案了。
 
问题解决了?
 
后退
顶部