python安装环境准备
NOTICE:
不建议使用conda库内的python库,调用会报ucrtbase.dll错误,慎用。
python3.6.6 支持vs2010,msvc120
python代码
import win32com
from win32com.client import Dispatch, constants
def TestWinCom():
w = win32com.client.Dispatch('Word.Application')
# 或者使用下面的方法,使用启动独立的进程:
# w = win32com.client.DispatchEx('Word.Application')
# 后台运行,不显示,不警告
w.Visible = 1
w.DisplayAlerts = 0
# 打开新的文件
doc = w.Documents.Open("E:\\test.docx")
# worddoc = w.Documents.Add() # 创建新的文档
s = w.Selection
s.Paste()
c++调用代码:
// docopt.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "Python.h"
#include <stdio.h>
#include <Windows.h>
int main()
{
Py_Initialize(); //初始化,创建一个Python虚拟环境
if (Py_IsInitialized())
{
PyObject* pModule = NULL;
PyObject* pFunc = NULL;
int argc = 1;
wchar_t* argv[] = { L"" };
PySys_SetArgv(argc, argv); //加入argv参数 否则出错
pModule = PyImport_ImportModule("docopt"); //参数为Python脚本的文件名
if (pModule)
{
pFunc = PyObject_GetAttrString(pModule, "TestWinCom"); //获取函数
PyEval_CallObject(pFunc, NULL); //执行函数
}
else
{
printf("导入Python模块失败...\n");
}
}
else
{
printf("Python环境初始化失败...\n");
}
Py_Finalize();
}
代码调试过亲测可用
注意:
int argc = 1;
wchar_t* argv[] = { L"" };
PySys_SetArgv(argc, argv); //加入argv参数 否则出错
pModule = PyImport_ImportModule("docopt"); //参数为Python脚本的文件名 为NULL,报错,切记
环境搭配什么的比较简单,略过
visual studio 编译好的可执行程序 报错问题解决:
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
需要将python安装目录下的DLLs和Lib文件夹放可执行程序目录内
c++主函数调用方式新增两行代码解决和保证部分未装过python环境电脑正常运行
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('Dlls/')");