【发布时间】:2011-02-07 21:08:14
【问题描述】:
我有一个包含类“MyClass”的非托管 dll。 现在有没有办法在 C# 代码中创建此类的实例?调用它的构造函数?我试过了,但 Visual Studio 报告错误,并显示此内存区域已损坏或其他什么的消息。
提前致谢
【问题讨论】:
-
1) static void Main(string[] args) { IntPtr p = new IntPtr(); Program.CreateObserv(参考 p); } [DllImport(@"C:\mm_2008\liba.dll", EntryPoint = "??0CRls@fld@@QAE@ABV01@@Z", SetLastError = true, CallingConvention = CallingConvention.ThisCall)] 内部静态外部无效 CreateObserv (参考 IntPtr p);此代码引发 AccessViolationException:accessviolationexception 试图读取或写入受保护的内存...
-
2) static void Main(string[] args) { IntPtr p = Program.CreateObserv(); } [DllImport(@"C:\mm_2008\liba.dll", EntryPoint = "??0CRls@fld@@QAE@ABV01@@Z", SetLastError = true, allingConvention = CallingConvention.ThisCall)] 内部静态 extern IntPtr CreateObserv (); - 此代码粉碎应用程序和应用程序主机
-
为了避免像“??0CRls@fld@@QAE@ABV01@@Z”这样的入口点名称被破坏,请在非托管 Dll 中使用 extern "C"。声明为 extern "C" 的函数在没有名称修改的情况下导出。
-
@Evgeny007 不要将代码放入 cmets,删除您的 cmets 并将代码放入问题中。