PB中如何编写COM和COM+程序.

pb调用C#中COM组件(2) 接pb调用C#中COM组件(1)续 阅读详情

    COM/COM+作为取代OLE的一种新技术,问世已经很久了,PB7中也早已提供了对它的支持,不过从现实情况上看,似乎大家使用到的不是很多,其实对于新一代的互联网应用,它还是能够发挥很大作用.下面我将从COM/COM+组件的生成,调用,以及应用范围上谈谈我的看法和心得.
    
    我将用PB10为开发工具做说明.假设要做一个表达式计算的COM组件,我想这个例子比较典型,用到了datastore,datawindowobject,用户对象等,既不会太简单,也不会太复杂(代码不多).

    首先最基本的操作,必须先有个WorkSpace,然后打开COM/COM+创建向导:

选中项目后,直接下一步,基本上不用改动,就完成了.

创建完成后,系统就有了一些基本对象:

    

    下面建立一个extend形式的datawindowobject,主要用于计算表达式用的,只要满足有一个列就行了.保存其名字为calc

    然后在n_genapp对象中建立一个计算表达式的函数:

public function string of_calc (string as_expression);
datastore lds_calc
string ls_rtn

lds_calc=create datastore
lds_calc.dataobject="calc"
lds_calc.insertrow(0)

ls_rtn=lds_calc.describe("evaluate('" + as_expression + "', 1)")
destroy lds_calc
return ls_rtn
end function

下面就打开project对象p_genapp_commts,进行发布.

注意,发布的project对象属性中,需要修改为将整个pbl的对象一起发布.

发布完成后,就可以调用了.先试试用pb程序调用:

新建一个程序,和窗口:

窗口上放置一个按钮,按钮中写入代码:

OLEObject OleObj
Integer li_rc

OleObj = CREATE OLEObject
li_rc = OleObj.ConnectToNewObject("PB100.n_genapp.1.0")
IF li_rc < 0 THEN   
 DESTROY OleObj
 MessageBox("Connecting to COM Object Failed",  "Error: " + String(li_rc))
 Return
END IF
sle_2.text=string(OleObj.of_calc(sle_1.text))
OleObj.DisconnectObject()
DESTROY OleObj

执行后,就可以看到计算结果了.

    下面我们看看,在其他开发工具中如何调用此COM组件,以BCB6为例:

    首先将genapp.dll导入类型库:

执行安装,将COM组件安装到控件面板,然后建立一个窗口,放置几个控件:

在"调用PBCOM"按钮中Clicked事件写代码:

        WideString ls_express;
        ls_express=Edit1->Text;
        Edit2->Text = COClass_n_genapp1->of_calc(ls_express);

点击按钮,就可以看到计算结果了.

用VB调用也比较简单,VC调用稍微复杂点,这里就不缀述了.

 

C#实现com组件供pb9使用 在VS2022和PB9.1环境下实现COM组件时,需注意以管理员身份启动VS,否则无法勾选“为COM互操作注册”选项,导致编译失败。创建项目时应选择“.NET Framework”类库模板,并在项目属性中勾选“使程序集COM可见”,选择x86平台以确保与32位PB9兼容。代码实现时,需定义接口并使用Guid和ProgId属性标记类,以便其他语言调用。编译生成后,需通过GACUtil和RegAsm工具将DLL注册到全局缓存和注册表中。最后,在PB中通过OleObject调用COM组件,确保组件正确连接并执行功 阅读详情

相关推荐

C#开发COM组件供PB调用

C#开发COM组件供PB调用 有时PB里难以实现的功能,在C#里好容易就实现了,这时我们就可用C#来开发COM组件,在PB里调用即可。 PB调用方法: int intValue oleobject objOle objOle=create OLEObject intValue=objOle.connecttonewobject("MyLib.MyClass") Sle_1.Text=ObjOle.GetIP()

pb制作comm组件 powerbuild

一步一步做COM:         一、New   选Workspace   名称:MyPBCOM   保存     二、New   选Target   COM/MTS   Component   ok   Next     三、Next     四、Application   Name:   mypbcom   Next     五、Next     六、Component   Name:n_m

守望 1226

PB9com组件创建实例

PB9com组件创建实例

C#调用PB写的com组件dll

背景 小编为了使用C#去模仿PB代码的加密算法,结果发现PB算法中,的long类型只有21亿,实际上传入的数值达到了78亿,造成了数据溢出,精度丢失的情况。 然而PB的算法已经使用C#不可以还原(C#的long类型比PB的long类型大多了)。想到是否可以使用C#去调用PB的加密,经过一番波折终于成功了。 先来一张最终效果图: C# PB: 步骤 首先得PB去生成CO...

weixin_34403693的博客 469

PB8开发一个COM组件

PB8开发一个COM组件 2.0 开发软件环境 windows7 + powerbuilder 8 2.1 先在D:盘根目录创建一个PB_COM的目录,用来存放我们的com组件。 2.2 打开pb8 开发环境,先创建一个Workspace:pb_com.pbw 2.3 接下来创建一个Target:pb_com.pbt

STM32 超声波模块输入捕获测距(标准库)

通道2设置为下降沿触发,触发瞬间会将CNT的记录到CCR2中,由于上升沿触发时已经将CNT置零所以此时的CNT的值就是高电平的持续时间。通道1设置为上升沿触发,触发的瞬间会将CNT的值记录到CCR1里面,同时设置通道1触发带有从模式,并把从模式设置为置零CNT。超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应)。输入捕获原理可以看看这位大佬,感觉写的很清楚,工作电压与电流:5V,15mA。感测角度:不小于15度。

qq_62425900的博客 2082

如何在pb中创建COM组件,并在asp中调用并返回结果集?

启动pb7.0,创建一个不可视的用户对象"uo_customer",新建"object",选择"custom  class" 类型,点击"ok"。 在新创建的用户对象中编写如下程序: 1.声明实例变量"instance  variables",对于com中不支持的类型,请声明为protected类型。protected:         datastore  ds_datastore 2.新建三个

龙卷风.NET的专栏 2859

autodl云服务器使用中的conda源报错

通过find path -name filename找到.condarc文件,在autodl服务器中,一般在/root/.condarc。为了利用jypyter打开conda虚拟环境运行,需要下载ipykenel。这个报错是源的问题,在通过源获取包元数据时出现了HTTP 429错误。通过conda换源解决。修改.condarc文件,命令: vim .condarc。但这样还不能解决问题,得把报错中有问题的源注释掉。通过以下命令添加清华镜像源。把报错的链接源注释如下。

Ty_kilig的博客 1584

PB 调用.NET COM组件

对于现在使用PB和.NET同时开发的项目,现在.NET已经有的功能,想在PB下调用,只能把.NET做成COM组件,再在PB中调用。 方法如下:    一.在.NET中新建类库    二.注册类库    三.在PB中调用 下面详细介绍一下:以.NET2005和PB11.5

7006

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

AM243x多核MCU启动流程解析与OSPI Flash烧录实战

嵌入式系统开发中,引导加载器是芯片上电后执行的第一段软件,负责初始化硬件、加载操作系统或应用程序。其工作原理通常遵循多级引导链,从ROM固件到用户可定制的二级引导程序,逐级建立完整的软件运行环境。这一机制的技术价值在于实现可靠的系统启动、支持安全校验,并为多核异构架构提供协同基础。在应用场景上,引导加载器广泛应用于工业控制、汽车电子和物联网设备,确保设备能从非易失性存储器中自主启动。本文聚焦于TI AM243x这类高性能多核MCU,深入剖析其包含RBL和SBL在内的三级启动流程,并详细演示如何通过UART接

weixin_28703451的博客 582

PB程序调用C++ COM生成对象发回-2问题

C++写的COM组件用于读CPU卡,在C#中正常能够引用使用,但是在PB中却是返回-2,不识别类名,代码如下: OleObject ole_AddComole_AddCom = Create OLEObjectli_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddCom为c#中namespace,AddComSe...

weixin_34396103的博客 205

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3408

pb调用java webservice_PB调用各类WebService或c#程序

慢慢的有很多接口pb都已经无法调用了,还有一些进制计算,位移等pb都无法实现,这时最简单的就是用c#做好,让pb调用。但是pb只能调用最基础的c++开发的标准dll。通过无数次的百度,我找到了一个好的方法,也许您已经知道了。但是我觉得还是要写出来,只要还有一个为此发愁的朋友存在。谢谢!方法思路是:1、​用c#写一个类,方法的参数一定要用标准数据类型,返回值也要是标准数据类型(string、int或...

weixin_36414025的博客 830

对接金蝶云星空调用即时库存信息查询API(附JAVA实现)

这篇文章教你如何对接金蝶API并且使用JAVA调用金蝶云星空的即时库存查询API

实用的博客 2608

YOLO26 无损剪枝:稀疏训练 + 结构化通道裁剪

YOLO26 无损剪枝链路:YOLO26s (7.2M) → 稀疏训练 30 epoch (L1 on BN gamma, lam=0.01) → 阈值剪枝 50% (gamma<quantile(0.5)) → 结构化重建 Conv+BN → 微调 10 epoch (lr=1e-4) → YOLO26n (1.9M, mAP50 0.808, 仅降 0.6%)。核心贡献:稀疏训练让 BN gamma 趋向二元分布 (近 0 或近 1), 剪枝阈值可直接取 median 自动 50% 压缩。

m0_64661770的博客 263

pb9.0 insert ole control 错误的修复工具

在PB里添加控件里面添加OLE控件时,当点击到第三标签程序直接崩溃 系统用久了,各种安装和卸载操作,造成系统里的某些dll关联错误,powerbuer9.插入ole时就会出错,严重影响了使用,今天写了一个程序,用于检查哪个com组件出问题了 检查原理: 遍历CLSID注册表项目,对于control类型的com组件,检查文件是否存在,注册是否正常。如果有错误的文件,可以进行相应的操作。 ......

自学C++,会写HelloWorld 1961

Spring Boot 与 Redisson 版本适配深度解析

Spring Boot 与 Redisson 的版本适配是一个动态演进的过程。开发者需要密切关注两者官方的版本更新日志,建立完善的版本验证机制。本文提供的适配方案基于当前最新技术状态(2024年1月),建议在实际生产环境中通过灰度发布策略验证版本兼容性。只有深入理解底层技术原理,才能在分布式系统的星辰大海中稳健航行。延伸阅读Spring Boot 官方迁移指南。

fudaihb的博客 1083

pb调用c语言dll,PB调用C#编写的Dll类库

在c# 中编写com组件,供PB调用实例前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。c#中新建类库类库类型为通用类库,项目名为AddCom1、配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“应用程序”->“程序集信息”,勾选“使程序集COM可见”,然后点击“生成”,选择“为COM互操作注册”2、打开Assemb...

weixin_34377666的博客 800

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

PB调用C#编写的Dll类库

在c# 中编写com组件,供PB调用实例 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。 c#中新建类库   类库类型为通用类库,项目名为AddCom 1、配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“应用程序”->“程序集信息”,勾选“使程序集COM可见”,然后点击“生成”,选择“为COM互操作注册” ...

weixin_34184158的博客 1083

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 如何使用Sybase ASE数据库的扩展存储过程?
下一篇: 关于PB代码重用的全面探讨
圣殿骑士18
博客等级 码龄25年 279粉丝 34原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值