你说的对,非托管调用的异常是无法获得的===================================================
技术交流不该有界限 资源共享不该有条件
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主,结贴率保持100%>
1、欢迎一切问题有关的交流——无论答案对错;
2、不欢迎 顶、Mark、支持之类口水混分的人;
3、对带有性别的主题和求全部毕业代码者尽量不回答;
我保留对非<散分贴>蹭分者的厌恶和鄙视...
精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
所以,我没有精通,只有JZ
===================================================

解决方案 »

  1.   

    注明:
    这个dll是Win32动态链接库,不是COM
      

  2.   

    非托管——字面都是这样的,就不是你程序能够管理的。你所做的就是把要求给他,他只负责给你结果——Ok Or No Ok,呵呵~~和二郎神一样,听调不听宣的~~===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  3.   

    to wzd24
    问题是这个非托管的dll没有代码啊,是第一家公司提供的,问题就是得不到他的代码啊
      

  4.   

    使用非托管的类库,一定要慎之又慎,要考虑到各种环境下的影响,和不同版本的差异才可以。
    就是因为它的不可管理型,增大了灵活度,降低了安全性===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  5.   

    To lovingkiss
    难道就没有一个解决这样类似的问题的办法吗?
      

  6.   

    没有代码的类库——不管是非托管还是托管,基本上你都没有办法获得错误的。尤其它进行了自动错误屏蔽。如果它的代码里面来个Try,又不给你错误提示。你想想怎么样?===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  7.   

    从理论上讲,使用没有源代码的DLL——这和是否托管没有关系了。为何很多公司强烈要求不得使用第三方控件开发的原因就在于此——无法保证错误的有效控制。===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  8.   

    //这样试试try
    {
    //
    }
    catch // 这里什么都不写
    {
      //出错处理
    }
      

  9.   

    这是没有办法的,这个程序主要是负责给电信的网关收发短信,而这个dll是电信指名推荐的一家杭州公司开发的dll,他们只有Win 32的,没有.net做的组件,所以麻烦啊,我的WinForm代码应该是没有什么问题的
      

  10.   

    to amandag(高歌) 
    我程序里面和你说的是一样的我保证我已经在所有调用这个dll内方法的所有地方都用了try... catch{}这样来捕获所有异常,
    而且在Application.ThreadException也对程序所有发生的异常进行处理,还是捕获不到这个dll的异常Application.ThreadException这个应该是最低级的了……
    还是捕获不到
      

  11.   

    haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-06-28 08:49:26  得分: 0  
     
     
       to wzd24
    问题是这个非托管的dll没有代码啊,是第一家公司提供的,问题就是得不到他的代码啊
      
    ----------------------------------------------------------------------------------
    这个DLL是否有错误?会不会是你传入错误的参数导致DLL处理出错的??你要咨询一下这个DLL的提供商!
      

  12.   

    haolaiwu,Try只能保证你的程序出错会有提示,而不能保证外部出错也一定会进入的。如果对方的类库没有任何错误处理——你可能会获得一定的错误提示,否则大多数你都什么都获得不了的。
      

  13.   

    to wzd24
    我是按照它提供的demo中dll的P/Invoke抄下来的,所以参数上和它提供的标准demo是一致的,我有点怀疑这个公司的开发能力了……郁闷啊
      

  14.   

    to lovingkiss
    有时候是弹出"0x77dfdffd"指令引用的"0x7c86123c"内存。该内存不能为"written"。 
    这样的错误,这个肯定是这个dll内部抛出的异常啊……
      

  15.   

    这个不是dll内部抛出的异常,一般是它和系统冲突,系统抛出的异常;
    所以我说——他开发的环境很可能和你的“环境”有所出入的;建议:换台比较干净的系统,做一个只有一个调用该DLL的函数,用定时器刷新它,看看是否还出问题,就可以确定问题在哪里了。不要和我抢分,半个月从光腚到星星的目标,就靠你了
    ===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  16.   

    haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-06-28 08:59:29  得分: 0  
     
     
       to wzd24
    我是按照它提供的demo中dll的P/Invoke抄下来的,所以参数上和它提供的标准demo是一致的,我有点怀疑这个公司的开发能力了……郁闷啊-----------------------------------------------------------------
    那你就更应该去问问他们了!
      

  17.   

    打倒一切和我抢分的人,呵呵~~
    不要和我抢分,半个月从光腚到星星的目标,就靠你了
    ===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================
      

  18.   

    to lovingkiss
    ===================================================
    技术交流不该有界限 资源共享不该有条件
    博客空间:http://blog.csdn.net/lovingkiss
    资源下载:http://download.csdn.net/user/lovingkiss
    Email:loving-kiss@163.com
    本人说明:<我的帖子我做主,结贴率保持100%>
    1、欢迎一切问题有关的交流——无论答案对错;
    2、不欢迎 顶、Mark、支持之类口水混分的人;
    3、对带有性别的主题和求全部毕业代码者尽量不回答;
    我保留对非<散分贴>蹭分者的厌恶和鄙视...
    精通:jīnɡtōnɡ对学问技术等透彻的了解并熟练掌握
    所以,我没有精通,只有JZ
    ===================================================你的这个尾巴太长了点……哈哈
      

  19.   

    //这样试试try
    {
    //
    }
    catch // 这里什么都不写
    {
      //出错处理
    }
    ---------------------------------------------------------------------------------
    这种方法是可以尝试的,这种方法在大部分时候可以捕获异常。Application.ThreadException 也是一种很好的方法,另外如果你有辅助线程的话,辅助线程的入口处,也要Try...Catch处理
    还有,既然.net平台可以提示错误,说明这个错误是可以被捕捉的,因为.net平台是最后一道防线,专门用来捕捉你没有捕捉到的东西。.net平台有内置的异常处理机制。
    所以该错误还是可以被捕捉的,建议你Reflector 一下.net的异常处理机制,看看有没有更好的办法来进行捕捉。
      

  20.   

    关注,如果在winform运行正常,估计代码应该没有什么大问题
      

  21.   

    在C#中,申明Api方法时DllImport有一参数SetLastError,设为True(C#默认为false),在代码调用dll方法之后,再调用
    int er = Marshal.GetLastWin32Error();
    这样就可以捕捉到错误代码.
      

  22.   

    Bote_China的方法应该不错1、不过如果对方也利用Try之类的进行了错误处理。
    2、如果是DLL和系统环境的冲突造成的崩溃
      

  23.   

    试试在WinForm程序和第三方非托管的dll之间添加一个新非托管的dll,新的dll处理第三方非托管的dll的异常,WinForm程序通过新的dll使用第三方非托管的dll功能WinForm程序 -〉第三方非托管的dll进化WinForm程序 -〉新的dll -〉第三方非托管的dll
      

  24.   

    try
    {
    //
    }
    catch // 这里什么都不写
    {
      //出错处理
    }
    只能捕获托管的异常,非托管的异常捕获不了
      

  25.   

    楼主可以查以下你的传参是否有问题,当然由于没有DLL你是很难确定,主要靠多实验如果还是不能解决问题,你可以另外包一层,用开发这个DLL的语言包,然后看看你传的为什么错误这样一般可以解决问题.
      

  26.   

    这是没有办法的,这个程序主要是负责给电信的网关收发短信,而这个dll是电信指名推荐的一家杭州公司开发的dll,他们只有Win 32的,没有.net做的组件,所以麻烦啊,我的WinForm代码应该是没有什么问题的
    =================================
    呵呵,我也做过类似功能。第三方提供给我的dll文件,注册成COM组件。
    后来我用类型库导入程序(Tlbimp.exe)将COM 类型库中的类型定义转换为公共语言运行库程序集中的等效定义。用起来和.net的类库一模一样。
    不知道你的dll文件是否能注册成COM组件?
      

  27.   

    to patrickpan(离别钩)
    我的dll不是Com哦,我在上面已经说清楚了,是动态链接库,调用和调用Win32 API一样
    如果是COM还好办点了
      

  28.   

    haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-6-28 8:46:35  得分: 0  
        
    注明:
    这个dll是Win32动态链接库,不是COM--------------------------------
    在发完帖的时候就补充了,哈哈
    patrickpan(离别钩)有什么好的办法吗  
     
      

  29.   

    这个问题估计又是一个无法解决的问题了……对.net来说
      

  30.   

    for win32 api,GetLastError() is the only choice, no other way.
      

  31.   

    it is not a problem for .Net.in C++, if you want to use Win32 API, u also need to check the result yourself, not use try catch.So, make it clear, Win32 API is written in C, not C++.C++/C#/Java all have try{} catch{}, but C not.
      

  32.   

    to shrinerain(圣影雨) 
    It's written in VC++,
    How can i do?
      

  33.   

    这个dll是VC++6.0写的
    调用是在C#中调用GetLastError() 怎么用?
      

  34.   

    GetLastError和这个没联系的,这个只是用全局变量来返回函数执行状态的而已。
    比如使用某个api。返回结果和期望的不同。但不知道为什么返回的不是自己想要的,就用GetLastError获得错误信息,到WINERROR.H里找错误的宏,知道为什么错误。同样这个开放给用户使用,可以用SetLastError设置错误编码,然后用GetLastError获得错误信息,不过这个就只有自己约定,不可以找WINERROR.H了。
    异常和这个无关。你不可以通过公司,去找对方公司反映情况么?
      

  35.   

    我刚写了个vc的dll
    extern "C"
    {
      _declspec(dllexport) int IncludeExceptionFunction();}int IncludeExceptionFunction()
    {
    throw;
    return 0;
    }就这样而已。用.net调用。try,catch貌似可以捕捉到异常的。
      

  36.   

    to wuyazhe
    可以捕获到吗?你确定?
      

  37.   

    GetLastError确实与api函数中对异常的处理方法相关,在Api函数中,只有进行了SetLastError操作,在调用线程中GetLastError才可以捕获到上次调用Api函数的错误代码.托管C++中用throw方法抛出异常,用try catch是可以捕获异常的.
      

  38.   

    VC中捕获异常都分COM异常和VC自己异常而且托管语言无法处理NULL指针的LZ还是找那个DLL的开发者好了
      

  39.   

    同意:amandag(高歌) 
    try
    {}
    catch  //什么也不写
    //捕获非托管代码异常
    //在C#高级编程中有提到这一点
    {}
      

  40.   

    JGood() ( ) 信誉:100    Blog   加为好友  2007-06-30 12:19:46  得分: 0  
     
     
       同意:amandag(高歌) 
    try
    {}
    catch  //什么也不写
    //捕获非托管代码异常
    //在C#高级编程中有提到这一点
    {}  
     
    还有这样一说啊。我就是不知道类型。所以什么也没写。莫非就是这样?
    [DllImport("ThrowExceptionDll.dll", EntryPoint = "IncludeExceptionFunction")]
            public static extern int IncludeExceptionFunction();        private void button5_Click(object sender, EventArgs e)
            {
                try
                {
                    IncludeExceptionFunction();
                }
                catch
                {
                    MessageBox.Show("handled exception.");
                }
                finally
                {
                }
            }
     haolaiwu(宁愿相信世界上有鬼,也不相信女人那张嘴) ( ) 信誉:100    Blog   加为好友  2007-06-30 08:58:19  得分: 0  
     
     
       to wuyazhe
    可以捕获到吗?你确定?
      
     确定阿。要不你自己建个vc的dll,或者留邮箱我发给你测试点代码。