delphi制作动态库 vc来调用 该怎么写接口 怎么生成lib文件
解决方案 »
- 如何在新建的ActiveFormX里新建一供外部接口访问的函数
- 关于ACCESS数据库以独占方式打开的问题
- 关于CM_MouseLeave事件的处理的一个问题
- 怎样调用另一个应用程序
- 有没有DELPHI有这样的控件呀?急救
- 高分300!动态连接库函数能封装成一个类吗?
- 关于UpdateSQL的数据更新问题?为什么每次只能更新一条数据?
- 如何与IE进行交互????
- 奇怪的问题,数据集为空就关不掉?Access数据库建立主从关系后多表查询就查不到记录!online waiting!
- 句柄是什么?请给我最通俗的解释!
- 请问函数createfile(打开串口)的返回值是什么类型的?
- 日期計算,問題急。
library GetScreen;uses
ShareMem,
SysUtils,
Windows,Graphics,
Forms, JPEG,
Classes;
{$R *.res}function GetCurrentScreen(SaveFileName: Pchar):Integer ;Stdcall;
begin
...
end;exports
GetCurrentScreen;end.VC调用就是int getScreen(char* FileName );
extern "C" long _stdcall GetCurrentScreen(char* szSaveFileName); //external 'GetScreen.dll';void CTestCatchScreenDlg::OnOK()
{
typedef long (WINAPI * LPFUNGETSCREEN) (char*);
LPFUNGETSCREEN fGetScr;
HMODULE hMd = LoadLibrary("GetScreen.dll"); if ( hMd == NULL)
{
AfxMessageBox("LoadLibrary Error!");
return;
} fGetScr = (LPFUNGETSCREEN)GetProcAddress(
hMd, // handle to DLL module
"GetCurrentScreen");
if (fGetScr == NULL)
{
AfxMessageBox("GetProcAddress Error!");
return;
}
long lRet = (fGetScr)(".\\test.jpg"); }
如果使用Pascal协定,VC++的函数定义前要加_stdcall修饰(stdcall是Windows的标准调用方式,可以在所有支持API调用的语言中使用),并且需要在.DEF文件中的EXPORTS端中加入函数名。在Delphi定义时要在函数名后加stdcall修饰(参见帮助)。
如果使用C协定,VC++的函数定义前要加__declspec(dllexport)修饰,不需要再修改.DEF文件了。在Delphi定义时要在函数名后加cdecl修饰(参见帮助)。