D
dirk
Unregistered / Unconfirmed
GUEST, unregistred user!
我刚开始做Dll程序,其中用到ADO,开始总出错,说是没有调用CoInitialize,
由于公司里上班时间不能上网,只好狂找帮助,总算解决,uses ComObj,调用
CoInitializeEx(nil,0),一切ok,但是又产生几个问题:uses ActiveX,调用
Initialize(nil),也一样可以连数据库,似乎没有什么问题,那么两者的区别
是什么?其中ComObj单元也use了ActiveX,看CoInitializeEx的定义(见下),
type
TCoInitializeExProc = function (pvReserved: Pointer;
coInit: Longint): HResult
stdcall;
{$EXTERNALSYM TCoInitializeExProc}
var
CoInitializeEx: TCoInitializeExProc = nil;
{$EXTERNALSYM CoInitializeEx}
这个函数应该是外部引用进来的函数,是否就是ActiveX单元的
function CoInitializeEx(pvReserved: Pointer
coInit: Longint): HResult
stdcall;
……
function CoInitialize
external ole32 name 'CoInitialize';
function CoInitializeEx
external ole32 name 'CoInitializeEx';
函数?
看了一会儿帮助,发现总是提到一个函数OleInitialize,The OleInitialize function
initializes the OLE library. You must initialize the library before you can
call OLE functions.
Unit ActiveX;
……
function OleInitialize
external ole32 name 'OleInitialize';
procedure OleUninitialize
external ole32 name 'OleUninitialize';
我又试了一下,发现uses ActiveX,只用OleInitialize(nil),一样也能连接数据库,我
很疑惑,CoInitialize,CoInitializeEx,OleInitialize,使用任何一个后,都可以在Dll
中连接数据库,它们之间难道没有什么区别吗?起码CoInitializeEx比其他个多个不明白
是干吗的LongInt参数,我想它们之间应该是有区别的吧?
还有,我是否一定要用OleUninitialize或CoUninitialize函数去释放内存?用完就释放应该
是好习惯,但我在程序中总是要用到这些Dll函数产生Form去操作数据库,每次都
initialize,Uninitialize,是不是太麻烦了,也影响效率,Exe程序退出时,系统是否会自
动做Uninitialize的工作去释放内存?
请高手们指点一下。
谢谢。
由于公司里上班时间不能上网,只好狂找帮助,总算解决,uses ComObj,调用
CoInitializeEx(nil,0),一切ok,但是又产生几个问题:uses ActiveX,调用
Initialize(nil),也一样可以连数据库,似乎没有什么问题,那么两者的区别
是什么?其中ComObj单元也use了ActiveX,看CoInitializeEx的定义(见下),
type
TCoInitializeExProc = function (pvReserved: Pointer;
coInit: Longint): HResult
stdcall;
{$EXTERNALSYM TCoInitializeExProc}
var
CoInitializeEx: TCoInitializeExProc = nil;
{$EXTERNALSYM CoInitializeEx}
这个函数应该是外部引用进来的函数,是否就是ActiveX单元的
function CoInitializeEx(pvReserved: Pointer
coInit: Longint): HResult
stdcall;
……
function CoInitialize
external ole32 name 'CoInitialize';
function CoInitializeEx
external ole32 name 'CoInitializeEx';
函数?
看了一会儿帮助,发现总是提到一个函数OleInitialize,The OleInitialize function
initializes the OLE library. You must initialize the library before you can
call OLE functions.
Unit ActiveX;
……
function OleInitialize
external ole32 name 'OleInitialize';
procedure OleUninitialize
external ole32 name 'OleUninitialize';
我又试了一下,发现uses ActiveX,只用OleInitialize(nil),一样也能连接数据库,我
很疑惑,CoInitialize,CoInitializeEx,OleInitialize,使用任何一个后,都可以在Dll
中连接数据库,它们之间难道没有什么区别吗?起码CoInitializeEx比其他个多个不明白
是干吗的LongInt参数,我想它们之间应该是有区别的吧?
还有,我是否一定要用OleUninitialize或CoUninitialize函数去释放内存?用完就释放应该
是好习惯,但我在程序中总是要用到这些Dll函数产生Form去操作数据库,每次都
initialize,Uninitialize,是不是太麻烦了,也影响效率,Exe程序退出时,系统是否会自
动做Uninitialize的工作去释放内存?
请高手们指点一下。
谢谢。