dll
我用Depends看了确实有个哪个函数但是当我调用的时候
 [DllImport("Decode.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr GetIdCode();
却发生错误
无法加载 DLL“Decode.dll”: 动态链接库(DLL)初始化例程失败。 (异常来自 HRESULT:0x8007045A)  绝非路径问题。我换成绝对路径。或拷贝到 system32下都出错我又用了另一种方法
[DllImport("kernel32.dll")]
public extern static IntPtr LoadLibrary(String path);IntPtr i = LoadLibrary("Decode.dll")则结果为零
GetLastError()错误为1114;则我又用另一种方法 
[DllImport("kernel32.dll")]
public extern static IntPtr LoadLibraryEx(string lpLibFileName, int hFile, int dwFlags);IntPtr i = LoadLibraryEx(DLLPath,0,1) 这个到没问题。但是最后获取GetIdCode()的值的时候 缺出现尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

解决方案 »

  1.   

    VC++里的GetIdCode函数有导出入口吗?
      

  2.   

    把vc++ dll函数的定义贴出来。
      

  3.   


    vc++ dll是别人写好的一个dll。
      

  4.   

    就是在VC的.def文件里要把这个函数写进Exports下面,这样外面的程序调用才能找到函数入口
      

  5.   

    看看有没有缺少依赖的dll,文件是否需要注册、访问执行权限有无问题。
      

  6.   

    哪个高手能不能帮我看看这个dll 。
    我的QQ376597485
      

  7.   

    例如:你希望c++中的count方法能够被外界调用,应该这么写:extern "C" _declspec(dllexport)int _stdcall count(int init);int _stdcall count(int init)
      

  8.   

    在test.cs文件中加入一下代码:using System;using System.Runtime.InteropServices;namespace test{
        public partial class test : Form
        {
            [DllImport("D:\\dll\\debug\\dll.dll")]     // dll在磁盘中的存放位置
            public static extern int add(int a, int b);  
            private void SetButtonClick(object sender, EventArgs e)
            {             MessageBox.Show(Convert.ToString(add(3,2)));
            }}vc++ dll:dll.dll(dll中包含一个add求和方法)dll.h:extern "C" __declspec(dllexport) int add(int a, int b);dll.cpp:
    int add(int a, int b)
    {
    return a+b;  
    }
    此外需要一个.def文件用于导出函数,内容为:LIBRARY "dll"
    EXPORTS   
    add   @1  代码:测试步骤:首先确保你调试的vc生成的dll是debug版的,运行调用这个dll的c#程序,在打开vc dll那个项目的ide中选择“调试-附加到进程”手工附加刚才运行的c#程序的进程(在弹出的对话框中要选中Native(本机)),然后就应该可以进入vc代码中进行调试了(当然该dll的入口要设置断点了)我的测试环境为:windows2000, visual studio 2005
      

  9.   

    不是啊,楼主说他的同事都可以在.Net环境下调用哦.
      

  10.   


    C++ 的dll没有源码。 我想应该不会是DLL的问题。要不然别人怎么会可以调用呢
      

  11.   

    C#下调用VC++做的dll,如在调用时出现加载DLL文件,但这个DLL文件是在程序运行的目录下,很大可能是因为这个DLL还需要两个VC++的库文件(MFC42D.DLL,MSVCRTD.DLL)没有一起拷到程序目录下,使得调用报找不到DLL模块!用VC做的都需要这两个基本文件吧