QT编程代码中怎么嵌入汇编语句

QT编程代码中怎么嵌入汇编语句,第1张

例如:#include <QCoreApplication>
int main(int argc, char argv[])
{
   QCoreApplication app(argc, argv);
   int a = 40;
       int b;
       asm ("movl %1, %%eax; \
             shr  %%eax; \
             movl %%eax, %0;"
             : "=r" (b)
             : "r" (a)
             : "%eax");
       printf ("a = %d\nb = %d\n", a, b);
       system("pause");
   return appexec();
}

补充:Qt(官方发音同cute发音为 /kju:t/,虽然也俗称为QT发音为 /kju:tiː/")是一个跨平台的C++应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,比如控制台工具和服务器。

用Qt Designer 可以做的东西实在有点少,如果你只是自己无聊写写程序玩或是用designer来熟悉控件这是非常好的事但是如果你想要学深入哪怕是一点点,用designer你都会觉得寸步难行啊
奉劝楼主不能过度依赖于designer
如果你有问题的话多提提问偶灰常乐意为你决绝的

使qtdesigner好用。QtDesigner,也就是可视化设计,这在小型项目中常见,优点就是可观简便。纯代码设计UI,也就是不可视设计UI,这在中大型项目常见,优点是界面隐蔽性强。无论那种方式,实际上都是转化为第二种的方式,只是第一种是QT已经帮忙处理了,处理成第二种纯代码的形式。

ActiveX技术虽然是一项古老的技术,但是却有着广泛的应用,支付宝的密码输入控件,各大银行的密码输入控件,网页聊天室中的截屏功能,网页播放器中的p2p播放甚至Flash,Silverlight等等,在IE中都表现为ActiveX。虽然C#也能开发"用于网页的com应用",能达到类似ActiveX的效果,但是有一个要命的问题是必须得安装几百M的net Framework框架,如果仅仅为了安全的输入一个密码,而要用户下载几百M的安装程序,这是很多人不能接受的,Delphi做为win32下的原生开发工具,能很好的支持微软各种"古老"的经典技术。(再做点小广告:delphi的kyrix版本还能编译跨平台的应用哦!) 
ok,开工吧:
开发工具:推荐用delphi 2010(d7也可以,不过添加属性,方法等过程要手动,稍微麻烦点) 
1启用delphi2010-->File->New->Other-->Active Library
2项目命名为MyActiveX
3File-->Save All 全部保存
实际上这样就能编译了,不过只是空的dll
4File-->New-->Other-->Active Form
改名为MyForm
将对应的单元文件,保存为UMyFormpas
5打开MyAcitveXridl文件,切换到design视图,选中IMyForm接口,右击New-->Property
添加一个属性Msg
将Msg属性的Type改为BSTR 即WideString类型
完了之后,点击工具栏中的Refresh
Implementation(即上图中工具栏中圈起来的部分)--这一步很重要,点击之后,它将自动生成属性Msg对应的声明和实现代码模板
6打开UMyFormpas--即ActiveForm对应的单元,找到Set_Msg以及Get_Msg的实现部分,补充代码如下:
function TMyFormGet_Msg: WideString;
begin
result:=_msg;
end;
procedure TMyFormSet_Msg(const Value: WideString);
begin
_msg := value;
end;
当然TMyForm的private部分,得先加一个私有成员 
type
TMyForm = class(TActiveForm, IMyForm)
private
{ Private declarations }
_msg:WideString;

这样我们就为即将生成的ActiveX控件,添加了一个字符串类型的属性Msg,下面来测试一下:
7编译项目,会生成一个MyActiveXocx,在运行栏里输入
regsvr32 C:\Users\jimmyyang\Desktop\Delphi_activex\MyActiveX\MyActiveXocx
注:这里ocx的路径,请各位根据自己的实际路径修改
这样就完成了ocx的注册。
8放到html里测试一下:
<OBJECT ID='x' name='x' CLASSID='CLSID:52D17094-0687-4A2F-B2DB-30F3189AC659' align=center hspace=0 vspace=0 ></OBJECT>
<script type='text/JavaScript'>
var x = documentgetElementById("x");
alert(xMsg);
</script>
关于CLSID在哪里查看,打开:MyActiveX_TLBpas文件,定位到下面这里:
const
// TypeLibrary Major and minor versions
MyActiveXMajorVersion = 1;
MyActiveXMinorVersion = 0;
LIBID_MyActiveX: TGUID = '{49138437-8265-4B1A-9EAE-D0F615D68464}';
IID_IMyForm: TGUID = '{54A20855-29A3-4C92-85DE-A419DA457C7A}';
DIID_IMyFormEvents: TGUID = '{60BBC967-E1E6-4E98-BAE5-776BFD06E9CC}';
CLASS_MyForm: TGUID = '{52D17094-0687-4A2F-B2DB-30F3189AC659}';
其中 CLASS_MyForm: TGUID对应的就是ClassID
运行后,除了d出一个空白的警告框,暂时看不到其它:)(可不就是这样么?Msg属性没给任何初始值,当然是空字符串,所以d出一个空的警告框是正常的)
9我们再来添加一些控件和方法,以验证刚才设置的属性确实有效
在MyForm上添加一个文件框,一个按钮
 
按钮的事件如下:
procedure TMyFormButton1Click(Sender: TObject);
begin
_msg:= selfEdit1Text;
end;
即把文本框的值赋给属性Msg
再继续定位到Set_Msg,略做修改
procedure TMyFormSet_Msg(const Value: WideString);
begin
_msg := value;
selfEdit1Text := _msg;
end;
即设置Msg属性时,同时也把值显示在文本框里,以便等会儿我们好测试在js中给activeX属性赋值的效果
ok了,再来测试一下,编译一下,如果通不过,请先运行
regsvr32 C:\Users\jimmyyang\Desktop\Delphi_activex\MyActiveX\MyActiveXocx /u
将刚才注册的ocx反注册,同时关掉浏览器,不然该ocx文件一直被占用,无法更新
修改一下html的代码:
<OBJECT ID='x' name='x' CLASSID='CLSID:52D17094-0687-4A2F-B2DB-30F3189AC659' align=center hspace=0 vspace=0 ></OBJECT>
<hr />
<input type='button' value='显示Msg属性的值' onclick='ShowMsg()'/>
<input type='button' value='设置Msg属性的值' onclick='SetMsg()'/>
<script type='text/JavaScript'>
var x = documentgetElementById("x");
var ShowMsg = function(){
alert(xMsg);
}
var SetMsg = function(){
xMsg = 'js传过来的值';
}
</script>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13372190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存