错误1.
エラー 1 error LNK1561: エントリー ポイントを定義しなければなりません。
解决办法:将工程的类型改为dll动态库,设置方式如下:
右键工程,选择【プロパティ】、在弹出的面板中按下图设置:
设置前:
设置后:
问题收集中,未完待续。。。
官网下载安装
1.首先,进入Visual Studio官网,你可以直接下载最新的版本(我下载时候2019是最新的),当然也可以下载以前的版本
等待下载
2.安装程序下载安装验证完毕
3.工作负载勾选使用C++的桌面开发和Visual Studio 扩展开发
4.单个组件可以自行勾选,工作负载里勾选了项目相关的组件也会在单个组件中自行勾选上
5.语言包默认是简体中文,你也可以更改其他语言
6.安装位置可以在下面更改
7.点击安装
8.安装完成
根据自己喜好选择主题
启动vs使用使用Visual Studio编译C/C++
进入主界面,可以选择打开最近项,也可以直接点击右下角继续但无需代码
1.新建项目
1)点击菜单栏–>文件–>新建–>项目 也可快捷键Ctrl+Shift+N
我们可以看到下面这个界面
2)所选语言更改为C++
3)平台这里我们就选择windows,或者所有平台
4)项目类型这里选择控制台,或者所有项目类型
5)选择空项目,点击下一步
2.以C++为例,运行简单代码
1)改变默认路径,填写项目名称,可勾选将解决方案和项目放在同一目录中
2)右键源文件,点击“添加–>新建项”,改名(我这里是123.cpp),点击添加
也可用快捷键 Ctrl+Shift+A
输入简单的hello world代码
运行结果如下
如果你想使用万能头文件的话,可以参考我的另一篇博客
如何在Visual Studio编译C++时 使用万能头文件
好了 快来一起用Visual Studio这款宇宙级的IDE吧
对于 32 位 Python 的 C 扩展,以前用过 mingW32 编译,
但是 mingW32 不支持 64 位 Python 的 C 扩展编译,详情可见 stackoverflow,这位前辈的大意如下,
以下介绍 Visual Studio 2013 编译 64 位 Python 的 C 扩展步骤:
1)准备 C 文件和包装文件,
ExtDemo.c
//Purpose: C code, for wrappered.
#include#include#include
int fact(intn)
{if(n < 2)return 1;return n * fact(n - 1);
}char * reverse(char *s)
{chart;char *p =s;char *q = (s + (strlen(s) - 1));while(p
{
t= *p;*p++ = *q;*q-- =t;
}returns;
}//just for unit test, for the two function above
int unit_test(void)
{//test fact()
printf("4! = %d\n", fact(4));
printf("8! = %d\n", fact(8));
printf("12! = %d\n", fact(12));//test reverse
char s[10] = "abcdef";
printf("reversing 'abcdef', we get '%s'\n", reverse(s));char s2[10] = "madam";
printf("reversing 'madam', we get '%s'\n", reverse(s2));return 0;
}
包装代码 ExtDemo_Wrapper.c
//Purpose: According to the C code, write the Wrapper.
#include"Python.h"
//function declaration
int fact(intn);char * reverse(char *s);int unit_test(void);static PyObject * ED_fact(PyObject * self, PyObject *args)
{intnum;if(!PyArg_ParseTuple(args, "i", &num))returnNULL;return (PyObject *)Py_BuildValue("i", fact(num));
}static PyObject * ED_reverse(PyObject * self, PyObject *args)
{char *orig_str;if (!PyArg_ParseTuple(args, "s", &orig_str))returnNULL;return (PyObject *)Py_BuildValue("s", reverse(orig_str));
}static PyObject * ED_unit_test(PyObject * self, PyObject *args)
{
unit_test();return (PyObject *)Py_BuildValue("");
}//
static PyMethodDef EDMethods[] ={
{"fact", ED_fact, METH_VARARGS, "fact( m )"}, // NOTE, the last string is doc-string of this function
{"reverse", ED_reverse, METH_VARARGS, "reverse( str )"},
{"unit_test", ED_unit_test, METH_VARARGS, "unit_test()"},
{NULL, NULL},
};//
voidinitED()
{
Py_InitModule("ED", EDMethods);
}
setup.py
#!/usr/bin/env python
from distutils.core importsetup, Extension
MOD= 'ED'setup(name=MOD, ext_modules=[
Extension(MOD, sources=['ExtDemo.c', "ExtDemo_Wrapper.c"])])
2) Visual Studio 2013 工具准备及编译
开始菜单打开 Visual Studio Tools 文件夹,
选择 64bit Native Tools,双击打开,
设置编译环境,如下, 关于这两个参数的含义请参考 distutils.core 官方 help 文档,
set DISTUTILS_USE_SDK=1set MSSdk=1
切换到工程目录,编译,
编译完成后,在工程目录下生成 build 文件夹,
在其中 \build\lib.win-amd64-2.7 下得到编译生成的 pyd 文件,本例为 ED.pyd
3) 验证
完。
错误1.
エラー 1 error LNK1561: エントリー ポイントを定義しなければなりません。
解决办法:将工程的类型改为dll动态库,设置方式如下:
右键工程,选择【プロパティ】、在弹出的面板中按下图设置:
设置前:
设置后:
问题收集中,未完待续。。。
转载于:https://www.cnblogs.com/MinChenSmile/p/9794724.html