<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[delphi863的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/delphi863</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; delphi863]]></copyright><item><title><![CDATA[非常实用的MySQL连接函数（防止多次连接，断线自动重连）]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/147297682</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/147297682</guid><author>delphi863</author><pubDate>Thu, 17 Apr 2025 11:28:19 +0800</pubDate><description><![CDATA[防止多次连接，断线自动重连。]]></description><category></category></item><item><title><![CDATA[halcon数组操作]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/123252188</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/123252188</guid><author>delphi863</author><pubDate>Thu, 03 Mar 2022 15:29:34 +0800</pubDate><description><![CDATA[Tuple1 := [1,0,3,4,5,6,7,8,9] // 对数组进行定义及初始化


Tuple1[1]:=2//对某一个值进行赋值







halcon 对大小写敏感

上面的Tuple1[1]:=2 如果不小心写成 tuple1[1]:=2 那么halcon 将新定义一个数组长度为2



Tuple1 := [1,0,3,4,5,6,7,8,9]  // 对数组进行初始化
Tuple2:=[11,12,13]
t:=[Tuple1,Tuple2] //连接成新的数组
i:=|t|...]]></description><category></category></item><item><title><![CDATA[halcon 数制转换及 字符格式化输出]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/123151692</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/123151692</guid><author>delphi863</author><pubDate>Sat, 26 Feb 2022 16:19:29 +0800</pubDate><description><![CDATA[i1 := 123$'#o' //8进制，0为前缀
i2 := 123$'#x' //16进制，0x为前缀，7b为赋值
i3 := 123$'#X' //16进制，0x为前缀，7B为赋值，7b与7B是一样的
i4 := 123$'#f' //double型，默认保留小数点后六位.
i5 := 123$'#g' //使数字始终保持六位，不足补零.
i6 := 123$'#G' //使数字始终保持六位，不足补零.
i7 := 123$'#e' //转换成科学计数
i8 := 123$'#E' /...]]></description><category></category></item><item><title><![CDATA[Halcon语法]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/123151013</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/123151013</guid><author>delphi863</author><pubDate>Sat, 26 Feb 2022 16:03:44 +0800</pubDate><description><![CDATA[赋值符号: :=

不等号: #

注释符: *

字符串赋值: str:=’halcon’

等于比较符: if(X=10)

与: if(A&gt;1 and A&lt;30)

或: if(A&gt;1 or A&lt;30)

求反: if(not(A=10))

For 循环

 for I := 0 to NumBalls - 1 by 1

...]]></description><category></category></item><item><title><![CDATA[halcon 连接相机采集图像]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/123110579</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/123110579</guid><author>delphi863</author><pubDate>Thu, 24 Feb 2022 14:16:56 +0800</pubDate><description><![CDATA[相机采集图像（以笔记本摄像头为例）

执行“助手”——“打开新的Image Acquisition”：





如果没连其他的相机，那么点击“自动检测接口”则会检测出“DirectShow”，此时点击“实时”图标就可以用笔记本摄像头实时采集图像了：



然后点“插入代码”就可以看到采集图像的Halcon代码了：





* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('DirectSho]]></description><category></category></item><item><title><![CDATA[Halcon读取文件目录图像的三种方法]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/123109656</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/123109656</guid><author>delphi863</author><pubDate>Thu, 24 Feb 2022 13:29:55 +0800</pubDate><description><![CDATA[第一种方法：

读了一个单一图像：

read_image(Image,'fabrik')

这种方式可以快速的读取软件自身携带的库图像文件，系统设定了库图像映像文件的快速读取方式，我们也可以通过绝对地址的方式来读取指定的目录文件：

read_image(Image1,'E:/Halcon一日一练/参考资料/images/图片1.jpg')

图像设定的映像文件目录可以进行关闭，set_system函数可以对映像文件目录进行关闭，关闭之后必须读取图像的绝对地址，否则，系统将会报错，

set_system]]></description><category></category></item><item><title><![CDATA[c# 委托 delegate及使用代理的作用意义]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/122210127</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/122210127</guid><author>delphi863</author><pubDate>Wed, 29 Dec 2021 10:33:25 +0800</pubDate><description><![CDATA[关于委托写得最清楚明白的一篇文章，强烈推荐]]></description><category></category></item><item><title><![CDATA[c# 中的Delegate与Action（界面多线程应用）]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/122196222</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/122196222</guid><author>delphi863</author><pubDate>Tue, 28 Dec 2021 16:24:40 +0800</pubDate><description><![CDATA[很多C#初学者，都遇到过这样的问题，今天就这个问题，进行分析。



根源

先说下这个问题产生的根源，大家都知道，程序运行起来之后，首先会有一个主线程，主线程用于处理控件生成、界面渲染、事件响应等操作，因此我们可以理解为窗体里的控件是属于主线程的。

如果我们想实现与主线程同时执行另一件事，一般会去使用多线程，因此多线程，从某种意义上来说，它和主线程的身份是平等的，就像你和你的同事的关系一样，你们是平级的关系。如果你同事有一天想从你手上把你的项目程序拿过去，你愿不愿意？

所以，如果在多线程里操作主线程的]]></description><category></category></item><item><title><![CDATA[WCF简单实例详解]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/122039320</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/122039320</guid><author>delphi863</author><pubDate>Mon, 20 Dec 2021 14:00:52 +0800</pubDate><description><![CDATA[xfserver：是一个类库项目，定义服务契约（Service Contract），提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,该项目引用System.ServiceMode程序集；

	WCF采用基于契约的交互方式实现了服务的自治，以及客户端和服务端之间的松耦合。WCF包含四种类型的契约：服务契约、数据契约、消息契约和错误契约，这里着重于服务契约。从功能上讲，服务契约抽象了服务提供的所有操作；而站在消息交换的角度来看，服务契约则定义了基于服务调..]]></description><category></category></item><item><title><![CDATA[手把手wcf简单实例]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/122036937</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/122036937</guid><author>delphi863</author><pubDate>Mon, 20 Dec 2021 12:58:56 +0800</pubDate><description><![CDATA[WCF是微软为构建面向服务的应用程序所提供的统一编程模型。

下面通过一个简单的服务示例来认识WCF
1.新建项目，名称 XfServer，解决方案名称 XfStudy，模板选择类库，选择.NET Framework版本


2.修改Class1.cs文件名称为 IFirstService.cs
3.添加引用 System.ServiceModel
4.修改IFirstService.cs代码如下：

using System;
using System.Collections.Generic;
usin.]]></description><category></category></item><item><title><![CDATA[c++ 布尔运算]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121928341</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121928341</guid><author>delphi863</author><pubDate>Tue, 14 Dec 2021 15:30:59 +0800</pubDate><description><![CDATA[bool b=true;

bool b2=-b;

那么b2 是true?还是false?

对于大多数运算符来说，布尔类型的运算对象将被提升为int类型，如上所示，布尔变量b的值为真，参与运算时将被提升为整数值1，对它求负后的结果时-1，显然-1不等于0，所以b2的值为真。
...]]></description><category></category></item><item><title><![CDATA[c++ vector初始化易混淆的地方]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121922305</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121922305</guid><author>delphi863</author><pubDate>Tue, 14 Dec 2021 11:14:38 +0800</pubDate><description><![CDATA[在某些情况下，初始化的真实含义依赖于传递初始值时用的是花括号还是圆括号，例如，用一个整数来初始化vector&lt;int&gt;时，整数的含义可能是vector对象的容量也可能是元素的值。类似的，用两个整数来初使化vector&lt;int&gt;时，这两个整数可能一个是vector对象的容量，另一个是元素的初值，也可能它们是容量为2的vector对象中两个元素的初值。通过使用花括号或圆括号可以区分上述这些含义：

vector&lt;int&gt;v1（10）；//（圆括号） v1有10个元素，每个的值]]></description><category></category></item><item><title><![CDATA[指向指针的指针]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121905137</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121905137</guid><author>delphi863</author><pubDate>Mon, 13 Dec 2021 14:44:45 +0800</pubDate><description><![CDATA[int main() {
  int ival = 42;
  int* p = &amp;ival;
  int** pp = &amp;p;
  cout &lt;&lt; p &lt;&lt; endl; //指针值（地址）
  cout &lt;&lt; *p &lt;&lt; endl; //指针指向的内容值

  cout &lt;&lt; pp &lt;&lt; endl; //指针值（地址）
  cout &lt;&lt; *pp &lt;&lt; endl;//...]]></description><category></category></item><item><title><![CDATA[c++11 中的原始字面量]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121851947</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121851947</guid><author>delphi863</author><pubDate>Fri, 10 Dec 2021 11:17:12 +0800</pubDate><description><![CDATA[原始字面量就是不进行转义的完整字符串。

原始字符串字面量的定义为：R “xxx(raw string)xxx”
原始字符串必须用括号（）括起来，括号的前后可以加其他字符串，所加的字符串会被忽略，并且加的字符串必须在括号两边同时出现。

int main()
{
 string str=R"xxx(c\n\n)xxx";
 cout &lt;&lt; str &lt;&lt; endl;
 system("pause");
 return 0;

}



去掉R 后

int m...]]></description><category></category></item><item><title><![CDATA[c++字符数组的定义及初始化]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121850294</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121850294</guid><author>delphi863</author><pubDate>Fri, 10 Dec 2021 10:35:16 +0800</pubDate><description><![CDATA[定义时进行初始化:

char ch[20]="cpp"; //ok

cout &lt;&lt; ch &lt;&lt; endl;





仅定义不初始化

char ch[20];
ch = "cpp";//出现”表达式必须是可修改的左值“的错误提醒，编译报错“不可指定数据类型”。

可以使用strcpy(ch, "cpp"); 进行赋值



也可以单个字符赋值

char ch[20];
ch[0] = 'c';
ch[1] = 'p';
ch[2] = 'p';
ch[3] = '...]]></description><category></category></item><item><title><![CDATA[c++中字符数组和string类型的相互转换]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121849438</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121849438</guid><author>delphi863</author><pubDate>Fri, 10 Dec 2021 10:17:05 +0800</pubDate><description><![CDATA[字符数组转化成string类型
charch[]="china";
stringstr(ch);//等效 stringstr=ch;
或者
charch[]="china";
stringstr;
str=ch;

string类型转换为字符数组

 char ch[20];
string str = "china";
strcpy_s(ch, str.c_str());
string str2(ch);
cout &lt;&lt; str2 &lt;&lt;...]]></description><category></category></item><item><title><![CDATA[C++ const 和 constexpr 的区别]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121805774</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121805774</guid><author>delphi863</author><pubDate>Thu, 09 Dec 2021 09:57:27 +0800</pubDate><description><![CDATA[对于修饰Object来说，

const并未区分出编译期常量和运行期常量

constexpr限定在了编译期常量

然后我想对修饰函数多说两句，那就是constexpr修饰的函数，返回值不一定是编译期常量。#It is not a bug, it is a feature.#

constexpr int foo(int i)
{
 return i + 5;
}
int main()
{
 int i = 10;
 std::array&lt;int, foo(5)&gt; arr; /...]]></description><category></category></item><item><title><![CDATA[c++交换函数 的三种传值方式的异同]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121768743</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121768743</guid><author>delphi863</author><pubDate>Tue, 07 Dec 2021 14:43:53 +0800</pubDate><description><![CDATA[函数1：void swap(int a, int b)
{
  int c;
  c = a;
  a = b;
  b = c;
}

这种方式为值传递，函数内拷贝值，并不能进行交换！！！！！！

函数2：void swap(int *a,int *b)
{
  int c;
  c = *a;
  *a = *b;
  *b = c;
}

指针传递，调用的时候需要把参数的地址传进去：


int x =10,y = 20;
swap(&amp;x,&amp;y)...]]></description><category></category></item><item><title><![CDATA[c++ 指针类型的引用]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121767402</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121767402</guid><author>delphi863</author><pubDate>Tue, 07 Dec 2021 14:27:13 +0800</pubDate><description><![CDATA[通常理解为引用就是类型前面加个&amp;符号例如

int i=2;

int &amp;a=i;

如果时指针类型的引用让人看起来就很困惑了,

int a = 3;//定义变量a;
int* p = &amp;a; //等效于 int *p=&amp;a；
int* &amp;q = p; //等效于int  *&amp;q = p;

由于c++ 中对* 号和&amp; 号，是靠近类型侧还是变量名侧并没有要求，所以写法可以有多种，理解起来很困惑，甚至有写出 int &amp; *...]]></description><category></category></item><item><title><![CDATA[c++中引用一经定义不能更改转而引用其他变量的理解]]></title><link>https://blog.youkuaiyun.com/delphi863/article/details/121763772</link><guid>https://blog.youkuaiyun.com/delphi863/article/details/121763772</guid><author>delphi863</author><pubDate>Tue, 07 Dec 2021 13:14:37 +0800</pubDate><description><![CDATA[c++中对引用的定义和说明：

引用变量是一个别名，也就是说，它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量，就可以使用该引用名称或变量名称来指向变量，对引用的操作与对变量直接操作完全一样。

定义格式为：类型 &amp;引用变量名 = 已定义过的变量名。

引用的特点：

　　①一个变量可取多个别名。

　　②引用必须初始化，只有别名是不能成立的。（如果不初始化，编译器出错警告）

　　③引用只能在初始化的时候引用一次 ，不能更改为转而引用其他变量。

如下示例：

#include &lt;]]></description><category></category></item></channel></rss>