VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 仙剑魔

[分享] 从内存加载DLL

  [复制链接]
发表于 2011-11-18 18:25:38 | 显示全部楼层
顶啊
回复 支持 反对

使用道具 举报

发表于 2011-11-20 13:55:29 | 显示全部楼层
fox7 发表于 2011-5-10 14:37
谢谢,这个功能正需要!

测试了传递简单long参数的dll,成功调用,希望大家多多测试,避免有Bug

VB版的如果参数是字符串怎么处理?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-11-21 13:29:30 | 显示全部楼层
leo200511 发表于 2011-11-20 13:55
VB版的如果参数是字符串怎么处理?

unicode的话用strptr取个地址
ansi的放到byte()里传个首地址进去
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2011-11-21 15:21:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2011-11-21 15:58:41 | 显示全部楼层
仙剑魔 发表于 2011-11-21 13:29
unicode的话用strptr取个地址
ansi的放到byte()里传个首地址进去

我就是这样做的,但参数的值就变了:

Private Declare Function Mydlltest Lib "SampleDLL.dll" (ByVal inargs As String) As Long

Private Sub Command1_Click()
    Dim dlldata() As Byte
    Dim SkinDate() As Byte
    Open "SampleDLL.dll" For Binary As #1
        ReDim dlldata(0 To LOF(1) - 1)
        Get #1, , dlldata
    Close #1
    Dim handle As Long
    Dim fun_stdcall As Long, fun_cdecl As Long
    handle = MemoryLoadLibrary(VarPtr(dlldata(0)))
    fun_cdecl = MemoryGetProcAddress(handle, "Mydlltest")
    Call CallFunc_cdecl(fun_cdecl, VarPtr("你好"))   '实际参数变为"?"
    Call MemoryFreeLibrary(handle)
End Sub

Private Sub Command2_Click()
    Call Mydlltest("中华人民共和国")  '正常
End Sub

回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-11-23 10:15:59 | 显示全部楼层
本帖最后由 仙剑魔 于 2011-11-23 10:16 编辑

Private Declare Function Mydlltest Lib "SampleDLL.dll" (ByVal inargs As long) As Long
用string的话,VB会自动转换,所以得不到结果
回复 支持 反对

使用道具 举报

发表于 2012-4-28 13:17:12 | 显示全部楼层
我来测试一下
回复 支持 反对

使用道具 举报

发表于 2012-4-29 21:40:03 | 显示全部楼层
膜拜牛人, 可惜这种邪恶的代码终究还是逃不过杀毒软件, 我用的是ESET, 阻止下载, 关闭所有监控都不能下载, 居然不能完全关闭。

点评

PS:我只是翻译的。。。  发表于 2012-4-30 00:05
厄,下次我在里面只留代码好了,话说你的杀软直接检查压缩包内数据了?先进啊~  发表于 2012-4-30 00:05
回复 支持 反对

使用道具 举报

发表于 2012-4-29 23:09:22 | 显示全部楼层
是好东西顶。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2012-4-30 20:25:09 | 显示全部楼层
能说下这个怎么用吗,以微软的WIA为例
原来注册好的代码是

    Set img = CreateObject("WIA.ImageFile")
    Set ip = CreateObject("WIA.ImageProcess")
    img.LoadFile App.Path & "\yzm.png"
    ip.Filters.Add ip.FilterInfos("Convert").FilterID
    ip.Filters(1).Properties("FormatID").Value = wiaFormatBMP
    Set img = ip.Apply(img)
    img.SaveFile App.Path & "\yzm.bmp"
    Set ip = Nothing
    Set img = Nothing

目的就是用wia把png转bmp,现在用你这个应该怎么写?写下好吗?谢谢

点评

当然,如果能用win api实现createobject那就另当别论了,传说Matthew Curland《Advanced Visual Basic》(人称VB圣经)这书里有。。。  发表于 2012-4-30 23:39
这种的不行,这个只用于loadlibrary加载然后调用DLL函数或资源的。。。  发表于 2012-4-30 23:37
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-4 19:19

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表