open cv+C++错误及经验总结(八)

Registered Clipboard Formats

Many applications work with data that cannot be translated into a standard clipboard format without loss of information. These applications can create their own clipboard formats. A clipboard format that is defined by an application, is called a registered clipboard format. For example, if a word-processing application copied formatted text to the clipboard using a standard text format, the formatting information would be lost. The solution would be to register a new clipboard format, such as Rich Text Format (RTF).

the most  英[ðə məust]美 [ði most]

特大

clipboard  英 [ˈklɪpbɔ:d]  美 [ˈklɪpˌbɔrd, -ˌbord]

n.

carriage

去背

英 [ˈkærɪdʒ]
美 [ˈkærɪdʒ]

n.   

剪贴板应用程序实例:

void CcutpasteDlg::OnBnClickedBtnSend()
{
	// TODO: Add your control notification handler code here
	if (OpenClipboard())
	{
		CString str;
		//HANDLE hClip;
		char *pBuf;
		EmptyClipboard();
		GetDlgItemText(IDC_EDIT_SEND, str);//get data
		HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE,str.GetLength()+1);//alloca memory
		//LPVOID lp = GlobalLock(hmem);
		pBuf = (char*)GlobalLock(hmem);
		strcpy(pBuf,str);
		GlobalUnlock(hmem);
		SetClipboardData(CF_TEXT,hmem);
		CloseClipboard();
	}
}


void CcutpasteDlg::OnBnClickedBtnRecv()
{
	// TODO: Add your control notification handler code here
	if (OpenClipboard())
	{
		if (IsClipboardFormatAvailable(CF_TEXT))
		{
			HGLOBAL hClip;
			char *puf;
			hClip = GetClipboardData(CF_TEXT);
			puf = (char *)GlobalLock(hClip);
			GlobalUnlock(hClip);
			SetDlgItemText(IDC_EDIT_RECV,puf);
		}
		
		CloseClipboard();
	}

}

Onpipecreate

handle hpipe;

hpipe = createnamedpipe(.....);

if(invalid_handle_value = hpipe)

{

    hpipe = null;

   return;

}

handle  hEvent;   /create manual reset event

hEvent = CreateEvent(...);

if(!hEvent)

{

closehanle(hpipe);

hpipe = null;

return;

}


OVERLAPPED ovlap;

ZeroMemory(&ovlap, sizeof(OVERLAPPED);

ovlap,hEvent = hEvent;

if(!ConnectNamedPipe(hPipe,&ovlap))

{}

if(WAIT_FAILED == WaitForSingleObject(hEvent,INFINITE))

{...}

编程思路:

1,handle hpipe; 定义一个句柄 ,调用createnamedpipe()函数——创建命名管道

2.连接命名管道connectNamedPipe(handle hpipe,LPOVERLAPPED lpOverlapped),首先需定义参数,如果hNameedPipe参数所标示的

管道是用FILE_FLAG_OVERLAPPED标记打开的,并且这个参数不是NULL,则这个参数(LPOVERLAPPED )所指向的OVERLAPPED结构体

中必须包含人工重置事件对象句柄。

3.HANDLE hEvent;
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ///人工重置事件对象句柄。

OVERLAPPED ovlap;
ZeroMemory(&ovlap, sizeof(OVERLAPPED));

4.可以调用connectNamedPipe(handle hpipe,LPOVERLAPPED lpOverlapped)函数了。这个函数的作用是让服务器等待客户端的连接请求

到来。

5.然后调用WaitForSingleObject()函数等待事件对象(hEvent)变为有信号状态。

6.最后,当请求到所等待的事件对象后,也就是当该事件对象变成有信号状态时,说明已经有一个客户端连接到命名管道的实例上了。

注:每步骤都应有错误检测,此处省略。

OnPIpeRead 

void Clesson17NamedPipeSrvView::OnPipeRead()
{
	// TODO: Add your command handler code here
	char buf[100];
	DWORD dwRead;
	if (!ReadFile(hPipe,buf,100,&dwRead,NULL))
	{
		MessageBox("failure!");
		return;
	}
	MessageBox(buf);
}

这里的ReadFile()函数的对象其实是管道。

OnPipeWrite

void Clesson17NamedPipeSrvView::OnPipeWrite()
{
	// TODO: Add your command handler code here
	char buf[] = "lajioefj";
	DWORD dwWrite;
	if (!WriteFile(hPipe,buf,strlen(buf)+1, &dwWrite,NULL))
	{
		MessageBox("write failure!");
		return;
	}
}
这里的WriteFile()函数的对象其实是管道。

OVERLAPPED structure          

Contains information used in asynchronous (or overlapped) input and output (I/O).

SyntaxC++

typedef struct _OVERLAPPED {
  ULONG_PTR Internal;
  ULONG_PTR InternalHigh;
  union {
    struct {
      DWORD Offset;
      DWORD OffsetHigh;
    };
    PVOID  Pointer;
  };
  HANDLE    hEvent;
} OVERLAPPED, *LPOVERLAPPED;

Members

Internal

The status code for the I/O request. When the request is issued, the system sets this member to STATUS_PENDINGto indicate that the operation has not yet started. When the request is completed, the system sets this member to the status code for the completed request.

'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR'

'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR' – VBForums

In this article the author writes:

You have three valid options. All others are invalid. The third of these options is the best. 
Option 1: Force ANSI (slower on NT, doesn't work on CE, possible problems with internationalization)

Code:

1
2
hFile = CreateFileA( "C:\\tab.doc" ,GENERIC_READ|GENERIC_WRITE,
  FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

Option 2: Force Unicode (doesn't work on 9x)

Code:

1
2
hFile = CreateFileW(L "C:\\tab.doc" ,GENERIC_READ|GENERIC_WRITE,
  FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

Option 3: Make it easily switchable in the project settings (easy to get working and ideal versions for everywhere)

Code:

1
2
hFile = CreateFile(TEXT( "C:\\tab.doc" ),GENERIC_READ|GENERIC_WRITE,
  FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

If you include <tchar.h>, you can use _TEXT() or _T() instead of TEXT(), but that is the only permitted variation. Everything else is invalid.

邮槽

邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。油槽是一种单向通信机制,创建邮槽的服务器进程读取数据

,打开邮槽的客户机进程写入数据。

void CMailslotSrvView::OnMailslotRecv()
{
	// TODO: Add your command handler code here
	HANDLE hMailslot;
	//create mailslot
	hMailslot = CreateMailslot("\\\\.\\mailslot\\MyMailslot", 0,
		MAILSLOT_WAIT_FOREVER, NULL);
	if (INVALID_HANDLE_VALUE == hMailslot)
	{
		MessageBox("create mailslot failure!");
		return;
	}
	char buf[100];
	DWORD dwRead;
	if (!ReadFile(hMailslot,buf,100,&dwRead,NULL))
	{
		MessageBox("read data failure!");
		CloseHandle(hMailslot);
		return;
	}
	MessageBox(buf);
	CloseHandle(hMailslot);
}

void CMailslotCltView::OnMailslotSend()
{
	// TODO: Add your command handler code here
	HANDLE hMailslot;
	//open mailslot
	hMailslot = CreateFile(TEXT("\\\\.\\mailslot\\MyMailslot"), GENERIC_WRITE,FILE_SHARE_READ,
		NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if (INVALID_HANDLE_VALUE == hMailslot)
	{
		MessageBox(TEXT("open mailslot failure!"));
		return;
	}
	char buf[] = "http://www.sunxin.org";
	DWORD dwWrite;
	//write data to mailslot
	if (!WriteFile(hMailslot, buf, strlen(buf)+1, &dwWrite, NULL))
	{
		MessageBox(TEXT("write data failure!"));
		CloseHandle(hMailslot);
		return;
	}
}


运算符重载:

成员函数运算符重载

#include <iostream>
using namespace std;
class X{
   int i;
public:
   X(int ii=0){i=ii;}
   X operator   +(const X &rx){
       i+=rx.i;
       return X(i);
   }
   int GetI(){return i;}
};
int main(){
   X a(1),b(3);
   cout<<(a+b).GetI()<<endl;
   return 0;
}
友元函数运算符重载

#include <iostream>
using namespace std;
class Complex{
public:
   Complex(double r=0.0,double i=0.0){
       real=r;
       image=i;
   }
   friend Complex operator+(const Complex&,const Complex&);
   void display();
private:
   double real;
   double image;
};
 
Complex operator+(const Complex &c1,const Complex &c2){
   return Complex(c1.real+c2.real,c1.image+c2.image);
}
 
void Complex::display(){
   cout<<"("<<real<<","<<image<<"i)"<<endl;
}
 
int main(){
   Complex c1(3,4),c2(5,-10),c3;
   c3=c1+c2;
   cout<<"c1=";c1.display();
   cout<<"c2=";c2.display();
   cout<<"c1+c2=";c3.display();
   return 0;
}
内联函数:

内联函数和宏的区别在于,宏是有预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。
我们也可以将定义在类的外部的函数定义为内联函数,比如:

Class TableClass{
 Private:
  Int I,j;
 Public: 
  Int add() { return I+j;};
  Inline int dec() { return I-j;}
  Int GetNum();
}
inline int tableclass::GetNum(){
return I;
}

  上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。
类的构造函数,析构函数和赋值函数

class string

{

public:

string(char *str = null);

~string(void);

string(const string &cp);

string operator +(const string &b);

private:

char *a;

}
构造函数与析构函数的另一个特别之处是没有返回值类型,这与返回值类型为void的函数不同。
类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式,这两种方式的效率不完全相同。
非内部数据类型的成员对象应采用第一种方式去初始化,以获得更高的效率。

类String的构造函数与析构函数

String::String(String &other)

{}

optimized drawing code

windowless activation

flicker-free activation

available in insert object dialog

mouse pointer notification when inactive

acts as a simple frame control

loads properties asynchronously

英 ['ekəʊ]
美 ['ekoʊ]

n.   

vt.   

vi.  

英 ['entətɪ]
美 [ˈɛntɪti]

n.  

1、.h文件是c和c++通用的,只是c的头文件里不能牵涉到c++的代码(必须在c的语法范围内)。
2、头文件只要语法符合纯c的语法,一般就可以在c和c++中通用了,具体视编译器而定(不过一般的都支持)。
3、#include<iostream.h>是c的调用约定。
     #include<iostream>是stl的调用约定。一个有“.h”,一个没有
所以如果使用#include<iostream.h>自然就不牵涉到stl,自然不需要using namespace std;了,但是也就不能使用stl库提供的功能呢。
4、如果使用到CString,一般都会产生错误,需要逐个替换,常见的替换可以参考如下链接:
    http://blog.csdn.net/yysdsyl/article/details/2463662    
希望起到抛砖引玉的作用,呵呵。
<>搜索顺序为:系统目录-->环境变量目录-->用户自定义目录。而""则是用户自定义目录-->系统目录-->环境变量目录.

至于这区别带来的影响就是效率问题。如果一个你自己定义的头文件,你用<>来包含,那么搜索这个头文件时,将会先从系统目录查找。其实这个头文件可能就在你的工程目录下,但是还是要把系统目录搜索一遍,这样,自然就降低效率了。

在vc中使用#include 命令,有三种形式:

1. #include <file.h>

vc执行这条指令时,它会在系统目录中去查找 file.h 文件。

在此条码命令中,vc不会去当前路径和附加路径中查找文件。

2. #include "file.h"

vc执行这条指令时,它首先会搜索附加路径,如果没有则会搜索系统路径,如果还没有则会去搜索当前路径。

3. #include "directory\file.h"

vc执行这条指令时,它会去指定的路径去查找文件,如果没找到,它不会继续查找。 

meta


英 ['metə] 美 ['metə]

abbr. normative英 ['nɔ:mətɪv]  美 [ˈnɔrmətɪv]adj.标准的,规范的overview英 [ˈəʊvəvju:]美 [ˈovɚˌvju]n.  abbreviation英 [əˌbri:viˈeɪʃn]美 [əˌbriviˈeʃən]

n.    

convention

英 [kənˈvenʃn]
美 [kənˈvɛnʃən]

n.   

registry

去背

英 ['redʒɪstrɪ]
美 [ˈrɛdʒɪstri]

n.   clinical英 [ˈklɪnɪkl]  美 [ˈklɪnɪkəl]adj.   

provision

英 [prə'vɪʒn]
美 [prəˈvɪʒən]

n.   

hexadecimal


英 [ˌheksəˈdesɪml]
美 [ˌhɛksəˈdɛsəməl]

n.& adj.

be present in    qualifier

英 [ˈkwɒlɪfaɪə(r)]
美 [ˈkwɑləˌfaɪɚ]

n.  

in accordance with英 [in əˈkɔ:dəns wið]   美 [ɪn əˈkɔrdns wɪð]

adv.      

recommendation

英 [ˌrekəmenˈdeɪʃn]
美 [ˌrɛkəmɛnˈdeʃən]

n.   

 PresentationLayer描述层

i) Presentation Service描述服务

) Session Layer会话层

n) Transfer Syntax传输语法

a) Calling Presentation Address访问描述地址

b) Called Presentation Address访问过的描述地址

c) Responding Presentation Address响应描述地址

d) Called Application Process Title访问过的应用进程

e) Calling Application Process Title访问应用进程名

convention英 [kənˈvenʃn]美 [kənˈvɛnʃən]

n.   

verification英 [ˌverɪfɪ'keɪʃn]   美 [ˌvɛrəfɪˈkeʃən]

n.   

下面的符号和缩写使用在标准的其它部分中。

ACSE      Association Control Service Element (联合控制服务元素)

CT          Computed Tomography (计算机X线断层摄影)

DICOM  Digital Imaging and Communications in Medicine (医学数字影像与传输)

HIS        Hospital Information System (医院信息系统)

OSI       Open Systems Interconnection (开放性系统互联)

PACS    Picture Archiving and Communication Systems (图像归档与传输系统)

RIS       Radiology Information System (放射信息系统)

TCP/IP Transmission Control Protocol/Internet Protocol (互联网传输控制协议)


ACR             AmericanCollege of Radiology北美放射学

ACSE           AssociationControl Service Element控制服务元素协会

ACSII           AmericanStandard Code for Information Interchange美国信息互换标准代码

AE         ApplicationEntity应用程序实体

ANSI            AmericanNational Standards Institute美国国家标准学会

AP         ApplicationProcess应用进程

ARTIM AssociationRequest/Reject/Release Timer带有冲突检测的载波侦听多路存取

CEN TC251 ComiteEuropeen de Normalisation欧洲标准化委员会-技术委员会251-健康信息学

CSMA/CD   CollisionSense Multiple Access/Collision Detection

DICOM DigitalImaging and Communications in Medicine医学数字图像和通信

EWOS          EuropeanWorkshop on Open Systems开放体系欧洲研讨会

FDDI            FiberDistributed Data Interface光纤分布式数据接口

HL7              Health-CareLevel 7健康工业7层接口标准

IEEE            Instituteof Electrical and Electronics Engineers电气电子工程师学会

ISDN            IntegratedServices Digital Network综合业务服务网

ISO        InternationalStandards Organization国际标准化组织

ISP        InternationalStandardized Profile国际标准配置文件

JIRA             日本工业放射学仪器

LAN             LocalArea Network局域网

MAP            ManufacturingAutomation Protocol制造业自动化协议

NEMA              National ElectricalManufacturers Association国际电器制造业协会

NIST            NationalInstitute for Standards and Technology标准和技术国家协会

NIU              NetworkInterface Unit网络接口单元

OSI        OpenSystems Interconnection开放式系统互连

PDU             ProtocolData Unit协议数据单元

PDV             ProtocolData Values协议数据值

SAP              ServiceAccess Point服务访问

TCP/IP  TransmissionControl Protocol/Internet Protocol传输控制协议/互联网协议

TOP             Technicaland Office Protocols专业和办公协议

UID              UniqueIdentifier唯一标识

UK GOSIP  UnitedKingdom Government Open Systems Interconnection Profile联合领域政府开放式系统互连外形

UL         UpperLayers上层

WAN           WideArea Network广域网

5协约

下面的协约用于出现在标准的这部分的服务描述表

=   相同的参数值用于指示或证实用于请求或响应的值。

C    有条件的(用户选项)

M   命令的用法

MF       命令的固定值

NU       未使用过的

P     新加入的供应者

U    用户选项(消息交换水平)

UF  使用固定值的用户选项

它们的区别与联系:

文件包含,VC++ Directories-》Include Directories

C/C++->General-》Additional Include Directories

文件链接,VC++ Directories-》Library Directories

Linker-》General->Additional  Library  Directories

Linker-》Input->Additional Dependencies










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值