VC函数是:extern "C" int __declspec(dllexport)PassPortRead(char *InPutData,char OuPutData[255]);
VB声明是:Private Declare Function PassPortRead Lib "PPRead.dll" (ByVal InPutData As String, ByVal OutPutData As String) As Integer
生成的文件能正常运行,并且能生成相应数据,但是在调试时提示"DLL调用约定错误"
E_Mail:linnda413@126.com
VC代码:
int PassPortRead(char *InPutData,char OutPutData[255])
{
char tmp[255];
int len = 0;
memset(tmp,0,255);
//初如化成员变量passInfo
memset(PassInfo.Name,0,20);
memset(PassInfo.Birth,0,20);
memset(PassInfo.Gender,0,10);
memset(PassInfo.Nationality,0,10);
memset(PassInfo.Number,0,20);
memset(PassInfo.IdCode,0,20);
memset(PassInfo.Expiry,0,20);
memset(PassInfo.CIssue,0,20);
//删除换行与回车字符
DelInStr(InPutData,"\r");
DelInStr(InPutData,"\n");
len = strlen(InPutData);
if (len == 0)
{
return -1;
} ......
今天想要做类似金山词霸屏幕取词的功能,在网上找了一些资料,发现都很复杂。既然金山词霸已经实
现了,借用之:
金山词霸中2005中带了一个XdictGrb.dll,其实是一个COM组件,并且实现了一个取词的插件框架。
其中的有以下内容:
1 接口
1.1 GrabProxy 取词代理对象
Function AdviseGrab(XDictGrabSink As IXDictGrabSink) As Long
广播一个XDictGrabSink(如果要实现取词功能,你需要自己来实现这个接口,具体的方法后面会有介绍。(Visual Basic的示例,使用其他语言类似)) 接口,在需要取词的时候会调用XDictGrabSink的QueryWord方法,你可以在这里实现你需要的功能。
Property GrabEnabled As Boolean
是否取词的属性
Property GrabMode As XDictGrabModeEnum
设定取词的属性,XDictGrabFlagEnum的定义后面会讲到。
Property GrabFlag As XDictGrabFlagEnum
设定取词健,比如是否要结合Ctrl或者Shift.
Property GrabSystemCP As Long
这个属性暂时不太清楚。
Sub GrabWord(lCursorX As Long, lCursorY As Long)
取x,y坐标的词,估计是屏幕坐标。
Sub UnadviseGrab(lCookie As Long)
取消对XDictGrabSink接口的广播。
Property XDictGrabPlugins As ......
def
subString
(s,
length):
us = unicode(s, 'utf-8
')
gs =
us.encode('gb2312
')
n = int(length)
t = gs[:n]
while True
:
try
:
unicode(t, 'gbk
')
break
except
:
n -= 1
t = gs[:n]
return
t.decode('gb2312
') ......
[原创]Python代码模块热更新机制实现(reload)
by AKara 2009-05-17 @ http://blog.csdn.net/akara @ akaras@163.com
---------------------------------------------------------------------
对一个游戏来说,无论是client或server都非常需要一套代码热更新的机制。
它能大大提高开发效率,又能超乎玩家期望地在运营期在线修正bug和增添功能。
可谓必备机制。
---------------------------------------------------------------------
在实现一个Python版本的热更新系统时,我走了不少弯路,钻了很多牛角尖,
完成了一个我看来有很多细节不够完善不够强大的版本,并在想做到'更完美'。
直到和同事DX,KHF讨论后,才发现最重要的是明确热更新机制的目标是什么。
往往我们善于将小事一件件做好,但却忘记问问自己为什么前行。
我要作的热更新机制的目标是:
(1)更新代码定义
(2)不更新数据对象
(3)不要依赖热更新机制解决所有问题。过于复杂的改动,重启进程
具体到Python这个语言而言,目标便是:
(1)更新类/函数及衍生对象:class/function/method/classm ......
开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
{"bar",(PyCFunction)foo_bar,METH_NOARGS,NULL},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initfoo() {
Py_InitModule3("foo", foo_methods, "My first extension module.");
} 我们可以将上述模块分成3个部分:1)c模块想对外暴露的接口函数。2)提供给外部的python程序使用的一个c模块函数名称映射表。3)c模块的初始化函数。模块的第一行将Python.h引入到模块中,这个文件将使得你的模块可以hook进python的解释器,从而可以为外部的 ......
开发环境:Ubuntu9.10,python2.6,gcc4.4.11,ubuntu下的python运行包和开发包是分开的,因此需要在新利得里面安装python-all-dev,从而可以在代码中引用python的头文件和库。2.下面是一个最简单的可以供python调用的c扩展模块,假设c程序文件名为foo.c:代码#include <Python.h>
static PyObject* foo_bar(PyObject* self, PyObject* args) {
Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
{"bar",(PyCFunction)foo_bar,METH_NOARGS,NULL},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initfoo() {
Py_InitModule3("foo", foo_methods, "My first extension module.");
} 我们可以将上述模块分成3个部分:1)c模块想对外暴露的接口函数。2)提供给外部的python程序使用的一个c模块函数名称映射表。3)c模块的初始化函数。模块的第一行将Python.h引入到模块中,这个文件将使得你的模块可以hook进python的解释器,从而可以为外部的 ......
原文:http://blog.sina.com.cn/s/blog_5fdcf5c90100fher.html
Access数据库“自动编号”字段归零
Access数据库“自动编号”数据类型是一个非常实用的类型,它可以很方便地帮助我们完成标识不同记录ID的工作。但是由于JET引擎的特性(SQL server使用T-SQL),当我们在Access数据库某张表中执行了删除所有数据的操作后,被用来标识唯一ID的字段将不再归零(从头开始计数),而是会继续延续上次ID递增计数,我们可以用若干种方法解决这样的问题,以下结合ASP推荐两种方法(以下方法都是建立在空数据表的“自动编号”归零的前提下):
第一种:压缩数据库
用过Access的朋友应该都知道在Access的工具栏上我们可以通过:
点击“工具”=>“数据库实用工具”=>“压缩和修复数据库”来完成对数据库的压缩和修复工作,当这项工作完成时,Access各空数据表的“自动编号”字段也会做归零操作。
而我们也可以用ASP来完成这项工作,以下是压缩数据库主要SUB:
<%
Sub CompactDB(strDBFileName)
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strOldDB
......