永发信息网

调用DLL命令后发现堆栈错误怎么办

答案:1  悬赏:80  手机版
解决时间 2021-02-19 04:21
调用DLL命令后发现堆栈错误怎么办
最佳答案
现在是更深入地进行探讨的时候了。在对托管代码进行 P/INVOKE 调用时,DLLIMPORTATTRIBUTE 类型扮演着重要的角色。DLLIMPORTATTRIBUTE 的主要作用是给 CLR 指示哪个 DLL 导出您想要调用的函数。相关 DLL 的名称被作为一个构造函数参数传递给 DLLIMPORTATTRIBUTE。
如果您无法肯定哪个 DLL 定义了您要使用的 WINDOWS API 函数,PLATFORM SDK 文档将为您提供最好的帮助资源。在 WINDOWS API 函数主题文字临近结尾的位置,SDK 文档指定了 C 应用程序要使用该函数必须链接的 .LIB 文件。在几乎所有的情况下,该 .LIB 文件具有与定义该函数的系统 DLL 文件相同的名称。例如,如果该函数需要 C 应用程序链接到 KERNEL32.LIB,则该函数就定义在 KERNEL32.DLL 中。您可以在 MESSAGEBEEP 中找到有关 MESSAGEBEEP 的 PLATFORM SDK 文档主题。在该主题结尾处,您会注意到它指出库文件是 USER32.LIB;这表明 MESSAGEBEEP 是从 USER32.DLL 中导出的。
可选的 DLLIMPORTATTRIBUTE 属性
除了指出宿主 DLL 外,DLLIMPORTATTRIBUTE 还包含了一些可选属性,其中四个特别有趣:ENTRYPOINT、CHARSET、SETLASTERROR 和 CALLINGCONVENTION。
ENTRYPOINT 在不希望外部托管方法具有与 DLL 导出相同的名称的情况下,可以设置该属性来指示导出的 DLL 函数的入口点名称。当您定义两个调用相同非托管函数的外部方法时,这特别有用。另外,在 WINDOWS 中还可以通过它们的序号值绑定到导出的 DLL 函数。如果您需要这样做,则诸如“#1”或“#129”的 ENTRYPOINT 值指示 DLL 中非托管函数的序号值而不是函数名。
CHARSET 对于字符集,并非所有版本的 WINDOWS 都是同样创建的。WINDOWS 9X 系列产品缺少重要的 UNICODE 支持,而 WINDOWS NT 和 WINDOWS CE 系列则一开始就使用 UNICODE。在这些操作系统上运行的 CLR 将UNICODE 用于 STRING 和 CHAR 数据的内部表示。但也不必担心 — 当调用 WINDOWS 9X API 函数时,CLR 会自动进行必要的转换,将其从 UNICODE转换为 ANSI。
如果DLL 函数不以任何方式处理文本,则可以忽略 DLLIMPORTATTRIBUTE 的 CHARSET 属性。然而,当 CHAR 或 STRING 数据是等式的一部分时,应该将 CHARSET 属性设置为 CHARSET.AUTO。这样可以使 CLR 根据宿主 OS 使用适当的字符集。如果没有显式地设置 CHARSET 属性,则其默认值为 CHARSET.ANSI。这个默认值是有缺点的,因为对于在 WINDOWS 2000、WINDOWS XP 和 WINDOWS NT
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
读图,回答下列问题:①填出图中字母表示的地
这是什么植物? 会开蓝色的花,很香。
朗逸换挡限位锁在哪里?
锦城艺术宫在哪里啊,我有事要去这个地方
听说升级到ios11 carplay好用了,导航带限速
2009年8月中国国家中医药管理局向世界展示了
高丽屯碳火烤肉店地址在什么地方,想过去办事
有哪些中药是以皮字结尾的
国家是不是物质?
古代 商业之路 除丝绸之路外还有哪些?海陆,
东风标致207三厢电瓶没电机械锁打不开车门怎
长沙天心区黑石铺附近哪家养老院好?十万火急
六思我想知道这个在什么地方
水云轩美容美疗中心步行街分店地址在哪,我要
魏铭宇的名字能打多少分
推荐资讯
高速公路两边的反光膜是国产的吗?中国在这方
怀孕七个月大腿内侧磨破了能用婴儿凡士林涂吗
【手机套餐怎么取消】如何短信方式开通及取消
新手机applestore为什么无法连接
原子最外层的电子数是4,那么是易得电子还是易
玩游戏的时候 会被突然出现的画面吓的一哆嗦
鸟鹰落在屋顶上好不好
攀枝花金江火车站至格里坪火车站有车次吗
你有三百元能做什么项目赚钱~~
枇杷几月份是最佳采摘时节谢谢了,大神帮忙啊
我喜欢一个班上一个女生,班级里的人狂传,那
鄂中化肥地址有知道的么?有点事想过去
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?