DLL PChar 参数如何转换成 String
在写DLL的时候,我们都知道,参数不能用 String,而用PChar替代。
我这里有一点不明白,
如果这个字符串不是立即就会处理,需要攒起来的,那么该如何转换呢?
(也许 New 一个 PChar,Move 一下内容也是一种不错的方法。这里不考虑这种方案。)
由于,很多情况下,我的设计都类似。
1. DLL 中创建一个全局的对象 A,处理这些字符串。
2. 不导出类,而仅仅是一个方法,参数用 PChar。该方法的实现中,用 A 的方法来执行。
3. PChar 用 StrPas 转换成 String 给 A 的方法。(!!!这里我总是在怀疑)
最近我总碰到莫名的地址报错。我更加怀疑这个地方了。
有没有同行研究过这种情况?
大家都是怎么处理的呢?
假设:有个主程序 B.exe。 写日志的类写在 C.dll 中,并且导出一个函数 Log(AStr:PChar)。有个子模块 D.dll 处理一些简单业务。
C.dll 在 exe 创建的时候就被动态加载。当 B 调用 D 之前,写一下日志,D在处理的时候,写一下日志,B调用完成后写一下日志。
“写日志”由于不是立即执行的,我们可以简单解释成 GetMem 分配内存。
那么,在 Log 这个函数里,每一次 GetMem 是不是都能由 C.dll 在被释放的时候,自己负责释放呢?
我这里有一点不明白,
如果这个字符串不是立即就会处理,需要攒起来的,那么该如何转换呢?
(也许 New 一个 PChar,Move 一下内容也是一种不错的方法。这里不考虑这种方案。)
由于,很多情况下,我的设计都类似。
1. DLL 中创建一个全局的对象 A,处理这些字符串。
2. 不导出类,而仅仅是一个方法,参数用 PChar。该方法的实现中,用 A 的方法来执行。
3. PChar 用 StrPas 转换成 String 给 A 的方法。(!!!这里我总是在怀疑)
最近我总碰到莫名的地址报错。我更加怀疑这个地方了。
有没有同行研究过这种情况?
大家都是怎么处理的呢?
假设:有个主程序 B.exe。 写日志的类写在 C.dll 中,并且导出一个函数 Log(AStr:PChar)。有个子模块 D.dll 处理一些简单业务。
C.dll 在 exe 创建的时候就被动态加载。当 B 调用 D 之前,写一下日志,D在处理的时候,写一下日志,B调用完成后写一下日志。
“写日志”由于不是立即执行的,我们可以简单解释成 GetMem 分配内存。
那么,在 Log 这个函数里,每一次 GetMem 是不是都能由 C.dll 在被释放的时候,自己负责释放呢?
...全文
相关推荐
C#调用dll的说明
C#调用dll的说明。重点是如何传递字符串函数。 [DllImport(@"TempLib.dll")] public static extern void GetSqlData(string ASource, StringBuilder ADest, int ADestSize); private void button1_Click(object sender, EventArgs e) { StringBuilder vDest = new StringBuilder(1024); GetSqlData("Zswang", vDest, 1024); Text = vDest.ToString(); }
VC/C#调用lazarus(delphi)写的dll, 演示参数传递方式
包含了普通类型的参数传递, 结构体传递, 字符串的传入/传出 还有callback等.
Windows系统Python直接调用C++ DLL的方法
主要介绍了Windows系统Python直接调用C++ DLL文件的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
Java 通过JNA访问其它语言的dll文件
java调用delphi 的dll实例,注意语言间的参数类型转换
delphi调用dll
这是我自己写的delphi调用dll 有静态的,也有动态调用,适合初学者学习


Windows SDK/API
