调用一个图片处理dll,发现loadfile不行.求指点

未解决  未打赏  
哇哈哈 哇哈哈  悬赏: 5 金币
发布:2017-06-21 15:03:42 分类:问答
文档中介绍:

使用LoadImageFromFile函数从硬盘或其他数据载体加载一幅图像。


语法


Declare Function
LoadImageFromFile Lib "ImageWizard.dll" (ByVal FileName As String, ByRef Image
As Long, Optional ByVal Index As Long) As IwStatus


参数


FileName -
预加载的文件的路径。


Image -
加载后图像的指针。


Index -
选中的加载帧,仅对GIFTifIco图像有效。


返回值


Ok -
加载图像成功。


AccessDenied -
指定的文件已被其他文件使用。


UnknownImageFormat - 所指定的文件是不支持的图像格式。


LoadingError -
加载过程中出现错误,比如GDI+没有初始化等。


OutOfMemory -
所加载的图像太大,无法完成加载。


根据文档中的VB代码,我写了简单的loadfile调用
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=759;bottom=469)
mainForm.add(
button={cls="button";text="打开文件";left=433;top=76;right=625;bottom=122;z=2};
button2={cls="button";text="button2";left=434;top=132;right=626;bottom=178;z=4};
edit={cls="edit";text="edit";left=266;top=30;right=628;bottom=61;edge=1;z=1};
picturebox={cls="picturebox";left=90;top=206;right=400;bottom=436;notify=1;z=3}
)
/*}}*/


import console;
import fsys;
import fsys.dlg;




var dll = ..raw.loadDll("\res\ImageWizard.dll",,"cdcel");

ImageWizardStartUp = dll.api("ImageWizardStartUp","void()") ;
LoadImageFromFile = dll.api("LoadImageFromFile","INT(STRING FileName, pointer& Image, INT Index)");


console.open();
var filename;

var imgHandle;

mainForm.button.oncommand = function(id,event){
//mainForm.msgbox( mainForm.button.text );
filename = fsys.dlg.open("所有文件|*.*");
mainForm.edit.text = filename;
ImageWizardStartUp();
console.log(filename)
}
mainForm.button2.oncommand = function(id,event){
console.log(LoadImageFromFile(filename,imgHandle,1))
}




mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage();
当然,我在aar的代码里面dll调用也试了更好调用约定为cdecl,但是加载图片的时候还是会无响应然后死机
这种情况我知道一般情况下应该是dll的调用参数声明的时候出了问题, 于是pointer改为了addr,string改STRING,等等,
但是调用就是不成功....
晕了,

VB的声明如下
Public Declare Function LoadImageFromFile Lib "ImageWizard.dll" (ByVal FileName As String, ByRef Image As Long, Optional ByVal Index As Long) As IwStatus
自我认为能改的都改了,连这个loadfileimg都搞不定,惭愧......


附件上是我写的代码和dll还有这个dll的vb版调用和说明文档, 谢谢
http://pan.baidu.com/s/1bprigH5

  • 哇哈哈 哇哈哈    
    Time:2017-06-21 15:04:43
    图片名称
  • 哇哈哈 哇哈哈    
    Time:2017-06-22 13:00:32
    已解决:
    貌似参数类型错误导致闪退

    在此感谢 qq群大神 : @kio1 提供解决办法和以下源码

    import win.ui;
    /*DSG{{*/
    mainForm = win.form(text="aardio form";right=759;bottom=469)
    mainForm.add(
    button={cls="button";text="打开文件";left=433;top=76;right=625;bottom=122;z=2};
    button2={cls="button";text="button2";left=434;top=132;right=626;bottom=178;z=4};
    edit={cls="edit";text="edit";left=266;top=30;right=628;bottom=61;edge=1;z=1};
    picturebox={cls="picturebox";left=90;top=206;right=400;bottom=436;notify=1;z=3}
    )
    /*}}*/

    import console;
    import fsys;
    import fsys.dlg;


    //重点: 如果没这个打开load就会闪退
    import win.ole;
    SysAllocString_ = Oleaut32.api("SysAllocStringA","pointer(string psz)");

    //原库dll函数声明
    var dll = ..raw.loadDll("\res\ImageWizard.dll");
    ImageWizardStartUp = dll.api("ImageWizardStartUp","void()") ;
    LoadImageFromFile = dll.api("LoadImageFromFile","INT(pointer FileName, pointer& Image, INT Index)");

    console.open();

    var filename;
    var imgHandle;

    mainForm.button.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button.text );
    filename = fsys.dlg.open("所有文件|*.*");
    mainForm.edit.text = filename;
    ImageWizardStartUp();
    console.log(filename)
    }
    mainForm.button2.oncommand = function(id,event){
    //路径有中文要进行转译先
    p = SysAllocString_(string.fromto(filename,65001,936))
    console.log(LoadImageFromFile(p,,0))
    }


    mainForm.enableDpiScaling();
    mainForm.show();

    return win.loopMessage();
  • Lastheart Lastheart    
    Time:2017-06-22 13:35:18
    好底层,研究得好深入。
  • daheian daheian    
    Time:2017-06-22 18:31:06
    [给力]好帖。
  • 哇哈哈 哇哈哈    
    Time:2017-06-23 11:20:50
    上面代码增加了状态输出,当调用getwidth函数的时候发现,提示:未初始化image
    import win.ui;
    /*DSG{{*/
    mainForm = win.form(text="aardio form";right=759;bottom=469)
    mainForm.add(
    button={cls="button";text="打开文件";left=433;top=76;right=625;bottom=122;z=2};
    button2={cls="button";text="加载";left=434;top=132;right=626;bottom=178;z=4};
    button3={cls="button";text="释放";left=431;top=413;right=623;bottom=459;z=5};
    button4={cls="button";text="获取宽度";left=436;top=191;right=628;bottom=237;z=6};
    edit={cls="edit";text="edit";left=266;top=30;right=628;bottom=61;edge=1;z=1};
    picturebox={cls="picturebox";left=55;top=125;right=365;bottom=355;notify=1;z=3}
    )
    /*}}*/





    import console;
    import fsys;
    import fsys.dlg;


    //重点: 如果没这个打开load就会闪退
    import win.ole;
    SysAllocString_ = Oleaut32.api("SysAllocStringA","pointer(string psz)");
    Ok = 0
    LoadingError = 1
    ImageNotInitialized = 2
    InvalidParameter = 3
    BitCountNotSupported = 4
    UnknownImageHandle = 5
    AccessDenied = 6
    UnrecognizedSignature = 7
    OutOfMemory = 8
    GdiplusNotInitialized = 9
    ValueOverflow = 10
    UnknownImageFormat = 11
    Win32Error = 12
    status = {
    [0] = "ok";
    [1] = "LoadingError";
    [2] = "ImageNotInitialized";
    [3] = "InvalidParameter";
    [4] = "BitCountNotSupported";
    [5] = "UnknownImageHandle";
    [6] = "AccessDenied";
    [7] = "UnrecognizedSignature";
    [8] = "OutOfMemory";
    [9] = "GdiplusNotInitialized";
    [10] = "ValueOverflow";
    [11] = "UnknownImageFormat";
    [12] = "Win32Error";
    }


    //原库dll函数声明
    var dll = ..raw.loadDll("\res\ImageWizard.dll");
    ImageWizardStartUp = dll.api("ImageWizardStartUp","void()") ;
    ImageWizardShutDown = dll.api("ImageWizardShutDown","void()") ;
    //DisposeImage = dll.api("DisposeImage","INT(pointer Image)") ;
    LoadImageFromFile = dll.api("LoadImageFromFile","INT(pointer FileName, pointer& Image, INT Index)");
    GetImageWidth = dll.api("GetImageWidth","INT(pointer Image, int& ImageWidth");
    console.open();

    var filename;
    var imgHandle;

    mainForm.button.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button.text );
    filename = fsys.dlg.open("所有文件|*.*");
    mainForm.edit.text = filename;
    ImageWizardStartUp();
    console.log(filename)
    }
    mainForm.button2.oncommand = function(id,event){
    //路径有中文要进行转译先
    p = SysAllocString_(string.fromto(filename,65001,936))
    var ret,imgHandle = LoadImageFromFile(p,,0);
    console.log(status[ret],imgHandle)
    ::SysFreeString(p);//释放
    }
    mainForm.button3.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button3.text );
    var ret = dll.DisposeImage({pointer handle = imgHandle});
    console.log(status[ret])
    ImageWizardShutDown();
    }
    mainForm.button4.oncommand = function(id,event){
    //mainForm.msgbox( mainForm.button4.text );
    var ret,width = GetImageWidth(imgHandle,0);
    console.log(status[ret],width)
    }


    mainForm.enableDpiScaling();
    mainForm.show();

    return win.loopMessage();
    显示:
    ok  pointer: 0A39C348
    ImageNotInitialized   0

    出错的含义,图片未初始化, 但是我已经初始化了啊????
    求解
[ 发单/接单 ]
换IP投票软件
PC蛋蛋自动挂机投注
新浪微博发微博显示尾巴的方法,比如显示来自iphone 7
百度文库批量自动上传软件
一点资讯app刷阅读量/评论/收藏/订阅功能/手机号注册
定做一个阿迪达斯官网注册器(需要破点击文字式验证码)
定制人人网自动注册/修改资料/采集/私聊软件
酷狗繁星直播网页协yi
YY多功能刷订阅刷粉丝
滑块验证码本地识别
狼人杀POST QQ登录注册 获取金币数量
做个贴吧发发帖的软件懂的来
今日头条账号保存cookie
抖音粉丝软件定做,只要粉丝
百家号自媒体发文软件定制
哔哩哔哩播放量
读取TB某个商品上架时间和相关信息
网易博客软件定制
定制天涯论坛发帖软件
定制今日头条批量自动发私信软件
[ 站内搜索 ]
[ 最近热帖 ]
万能助手 -- 扩展库大全集 13735
用aardio创建web工程图文讲解(1) 12816
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 11724
aardio绘图演示 11391
通过chrome.dll中间件控制外部chrome浏览器 10104
我常用的aardio技巧 9762
《边学C语言边赚钱——简码编程入门教程》系列集合 9607
aardio使用http或whttp进行get/post请求时经常cookies失效怎么办?__电脑计算机编程入门教程自学 9312
[源码下载]简码视频加密解密播放工具个人版v1.0发布,永久免费开源的知识变现神器 8551
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 8038
编程入门教程:aardio批量上传文件并显示进度条 7870
aardio调用nodejs的ws模块做一个简单的聊天通信示例 7023
电脑计算机编程入门教程自学:原生JavaScript判断字符是否为A-Za-z英文字母 6900
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 6496
乐玩插件AARDIO调用 6073
[ 近期热答 ]
电脑计算机编程入门教程自学:什么是buffer缓冲区? 1
aardio_代码编辑框书签管理器开源 1
aardio_怎么用ide库从代码编辑框中取出指定行的源码? 1
aardio_codepage代码页编码乱码暴力猜解工具 1
aardio内嵌echarts图表添加鼠标事件响应功能 2
aardio列表框listbox_模糊查找和精确查找 1
8亿QQ绑定手机泄露:通过腾讯QQ号查询QQ绑定的手机号码漏洞! 1
carl listviewex调用例子----------源码搬运工 2
Aardio内嵌Electron浏览框怎么正确添加启动参数? 1
Aardio取汉字的字节数或字符数 1
怎么实现mssql图片数据的读写 2
aardio_从49个数字里选六个和值为150的不重复的数字 1
在嵌入wps的时候,多了一个 透明的边框,这个怎么消除它 1
万能助手入门帮助教程:学会科学地管理工作文件 1
Aaardio开发内嵌Electron浏览框放服务器上无法下载组件的解决办法 1