C++编程->import函数

#import指令用于从一个类型库中结合信息。该类型库的内容被转换为C++类,主要用于描述COM界面。

语法

#import "文件名" [属性]

#import <文件名> [属性]

属性:

属性1,属性2,...

属性1 属性2 ...

文件名是一个包含类型库信息的文件的名称。一个文件可为如下类型之一:

* 一个类型库(.TLB或.ODL)文件。

* 一个可执行(.EXE)文件。

* 一个包含类型库资源(如.OCX)的库文件(.DLL)。

* 一个包含类型库的复合文档。

* 其它可被LoadTypeLib API支持的文件格式。

文件名之前可以有一个目录规格。文件名必须是一个已存在文件的名称。两种格式的区别是当路径未完全说明时,预处理器检索类型库文件的顺序不同。

动作

语法格式


引号格式 这种格式让预处理器首先搜索与包含#import语句的文件同一目录的类型库文件,然后在所有包括(#include)该文件的目录中搜索,最后在如下路径中搜索

尖括号格式 这种格式指示预处理器沿以下路径搜索类型库文件

编译器在以下目录中搜索已命名的文件:

1. PATH环境变量路径表。

2. LIB环境变量路径表。

3. 用/I(额外的包括目录)编译器选项指定的路径。#import可以任选地包含一个或多个属性。这些属性使编译器改变类型库头文件的内容。一个反斜杠(\)符可用在一个单一的#import语句中包含额外的行,例如:

#import "test.lib" no_namespace \

rename("OldName","NewName")

#import属性列出如下:

excludehigh_method_prefixhigh_property_prefixesimplementation_onlyinclude(...)inject_statementnamed_guidsno_auto_excludeno_implementationno_namespaceraw_dispinterfacesraw_interfaces_onlyraw_method_prefixraw_native_typesraw_property_prefixesrenamerename_namespace

  #import指令可创建两个在C++源代码中重构类型库内容的头文件,第一个头文件和用Microsoft接口定义语言(MIDL)编译器生成的头文件类似,但有额外的编译器生成代码和数据。第一个头文件与类型库有相同的基本名,其扩展名为.TLH。第二个头文件也有与类型库相同的基本名,其扩展名为.TLI。它包括了编译器生成成员函数的实现,且被包含在(#include)的第一个头文件内。

  两个头文件都在用/Fo(命名对象文件)选项指定的输出目录中。随后它们被读出和编译,就像第一个头文件被#include指令命名一样。

以下是伴随#import指令的编译器优化:

* 头文件被创建时,将被分配与类库相同的时间标志。

* 处理#import时,编译器首先测试头文件是否存在,是否过期。若条件为真,就不需重新创建。

* 编译器延迟对于OLE子系统的初始化,直到碰到第一个#import命令。

#import指令也可参与最小重建且可被置于一个预编译头文件中。

基本类型库头文件

基本类型库头文件由七个部分组成:

1. 头部固定正文:由注释、COMDEF.H(定义用在头部的一些标准宏)的#include语句和其它繁杂的安装信息组成。

2.前向引用和类型定义:由象struct IMyinterface之类的结构说明和用于一些TKIND_ALIAS项的类型定义组成。

3.灵敏指针说明:模块类_com_ptr_t是一个封装接口指针和消除调用AddRef、Release和QueryInterface函数需求的灵敏指针实现。此外,它隐藏了创建一个新COM对象中的CoCreateInstance调用。此部分采用宏语句_COM_SMARTPTR_TYPEDEF将COM接口的类型定义创建为_com_ptr_t模板类的模板特例化。例如,对于界面IFoo,.TLH文件包含有:

_COM_SMARTPTR_TYPEDEF(IFoo,_ _uuidof(IFoo));

编译器将其扩展为:type def _com_ptr_t<_com_IIID<IFoo,_ _uuidof(IFoo) >> IFooPtr;

类型IFooPtr可以用在原始的界面指针IFoo*的地方。结果,就不需调用各种IUnknown成员函数。

4. 类型信息(typeinfo)说明:主要由类定义和其它项组成,这些项说明由ITyptLib:GetTypeInfo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是在 Linux 环境下使用 C++ 调用 easyocr 的基本步骤: 1. 安装 easyocr 可以通过 pip 命令来安装 easyocr,需要先安装好 Python 和 pip 工具。在终端中输入以下命令: ```bash pip install easyocr ``` 2. 编写 C++ 代码 在 C++ 代码中,需要使用到 Python 的 C API 来调用 easyocr。以下是一个简单的示例代码: ```c++ #include <Python.h> int main() { // 初始化 Python 解释器 Py_Initialize(); // 导入 easyocr 模块 PyObject *pModule = PyImport_ImportModule("easyocr"); // 获取 easyocr 函数对象 PyObject *pFunc = PyObject_GetAttrString(pModule, "easyocr"); // 调用 easyocr 函数 PyObject *pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("image.jpg")); PyObject *pResult = PyObject_CallObject(pFunc, pArgs); // 处理 easyocr 函数的返回值 if (PyList_Check(pResult)) { int len = PyList_Size(pResult); for (int i = 0; i < len; i++) { PyObject *pItem = PyList_GetItem(pResult, i); if (PyUnicode_Check(pItem)) { const char *text = PyUnicode_AsUTF8(pItem); printf("%s\n", text); } } } // 释放内存 Py_DECREF(pModule); Py_DECREF(pFunc); Py_DECREF(pArgs); Py_DECREF(pResult); // 关闭 Python 解释器 Py_Finalize(); return 0; } ``` 3. 编译 C++ 代码 在终端中输入以下命令来编译上面的示例代码: ```bash g++ -o test test.cpp -I /usr/include/python3.8/ -lpython3.8 ``` 其中,`-I` 参数指定 Python 头文件的路径,`-l` 参数指定 Python 库文件的名称。 4. 运行程序 在终端中输入以下命令来运行编译好的程序: ```bash ./test ``` 程序会读取当前目录下的 `image.jpg` 图片,并对其进行 OCR 识别,最后输出识别结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值