我在DELPHI中调用用vc++的动态连接向导创建的动态连接库库,能够正常调用,但是我在退出我的dephi程序时,会异常,抱"Exception EAccessViolation in module 我的.exe at 00000000,read address of 00000000"错误
在 VC 中 extern "C" _declspec(dllexport) int ChanelSum( void )//DLLexport
在DELPHI中也是用 CDECL方式调用,
在 VC 中 extern "C" _declspec(dllexport) int ChanelSum( void )//DLLexport
在DELPHI中也是用 CDECL方式调用,
解决方案 »
- 为什么我的release版程序在XP系统下可以运行,而在vista或win 7系统下却不行,点击运行图标后程序没反应,也无出错的框跳出来。
- MFC问题,请高手进来帮忙解答高手哦~~~~~
- 单串口多地址如何初始化
- 删除ncb,clw,opt等都不能出现.提示符,怎么办
- 用vc6.0 写个mfc扩展dll,regsvr32注册dll, 没有找到dllRejisterServer输入点?在线等
- VC中控制一个 图片的移动时 一直闪 怎么解决 谢谢
- 老是搞不清楚堆、栈,请帮我明确一下概念好吗?
- API函数不能连续多次调用问题(急.....)
- 怎么显示编辑框行号?
- WINDOWS对一个文件重命名时出现一个框,然后获得焦点,还能换行,这是怎么做出来的?请指点一二。
- listctrl的问题,为什么图标显示不出,却预留了图标的空间
- ======= 200分! 给一个函数名的字符串, 如何得到该函数地址?============
语法:
[Public Private | protected] Function FunctionName([Var] [Arg1:DataType1;]
[Arg2:DataType2;...]) [:ReturnDataType]; far;stdcall;external ‘libname libname’ [Name
AliasName];
调用语句的语法包含下面部分:
关键字Public 可选的。表示函数可以被程序代码中的任意部分访问。
关键字Private 可选的。表示函数在声明类的单元(源代码)外不能访问。
关键字Protected 可选的。部分地表示保护函数,保护元素只能被当前类和它的子类访问。
关键字Function 必需的。表示调用函数,函数有返回值。
FunctionName 必需的。调用外部函数的名称,区分大小写。
关键字Var 可选的。表示通过引用传递参数。函数参数可以用值传递增,也可以通过引用传递。通过引用传传递参数,就意味着它的值没被复制到存放函数例程参数的堆栈中,避免复制就意味着程序执行速度加快了。通过引用传值,这将允许过程和函数改变参数的值。
ArgN:DataTypeN 可选的。参数名以及参数类型,传递的参数类型可以是:Shorint,Smallint,Longint,Integer(16/32),Single,Double,Extended,Currency,Date,Pchar,Object,Variant 等。
ReturnType 可选的。表示函数返回值的类型。
Stdcall 必需的。表示传递约定,这样调用模块(应用程序),与被调用模块(DLL)就使用相同的参数约定。
关键字external 必需的。声明访问外部函数。
Libname 必需的。访问的DLL 名称,16 位Delphi 中外部声明不带扩展名的库名。
Name ‘AliasName’ 可选的。Name 指令可以为外部函数起别名,避免与系统例程和函
数名相冲突。
外部程序调用的DLL 函数,必须遵照下列规则:
a. 必须列在DLL 的exports 子句中。
b. 在Delphi3 中,调用函数还需被声明为stdcall,来使用标准的WIN32 参数传递技
术。代替优化的register 参数传递技术。
c. 在WIN32 中,DLL 可以使用全局数据,该数据将不会通过调用应用程序来分享,每
当应用程序装载DLL 时,它在自己的地址空间中存储着DLL 的全局数据。
加上个调用约定~
加上个调用约定~ 方式在我刚开始调用的时候就会报
“ read address of 00000000”
改成__declspec(dllexport)呢?
DESCRIPTION "Implements a binary tree."
EXPORTS
Insert @1
Delete @2
Member @3
Min @4
改成__declspec(dllexport)呢?
会在DELPHI退出来的时候报 cpu错误 77f9f9eo ret,紧接着下一行是 ntdll.dbgusserbreakpoint
这个原因好象是我本来用单步调试vc的时候,他会报ntdll.dll 异常,但是也能正常执行下去
还有你最好FREEL
把里面所以执行全部删除,试试