//
pyUtil.cpp : 定义 DLL 应用程序的入口点。
//
#ifdef PYUTIL_EXPORTS
#define
PYUTIL_API __declspec(dllexport)
#else
#define
PYUTIL_API __declspec(dllimport)
#endif

#include
<
windows.h
>
#include
<
string
>
#include
<
Python.h
>

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)

...
{
switch (ul_reason_for_call)

...{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}


std::
string
Recognise_Img(
const
std::
string
url)

...
{

// 返回结果
return "从dll中返回的数据... : " +url;
}

static
PyObject
*
Recognise(PyObject
*
self, PyObject
*
args)

...
{
const char *url;
std::string sts;

if (!PyArg_ParseTuple(args, "s", &url))
return NULL;
sts = Recognise_Img(url);
return Py_BuildValue("s", sts.c_str() );
}



static
PyMethodDef AllMyMethods[]
=
...
{

...{"Recognise", Recognise, METH_VARARGS},

...{NULL, NULL} /**//* Sentinel */
}
;

extern
"
C
"
PYUTIL_API
void
initpyUtil()
//
每个模块必须有的函数,名称格式为"init"+“模块名”

...
{
PyObject *m, *d;
m = Py_InitModule("pyUtil", AllMyMethods); //这两步必须照写,保证有变量赋值
d = PyModule_GetDict(m); //
}
编译完成后将DLL文件改名为pyd文件,并放在PYTHON可以搜到的目录下就可以import了