32位DLL导入到32位

dve83

新成员
已加入
2012年9月6日
留言内容
1
编程经验
3-5
你好,

我有一个32位的Delphi编码DLL文件(简单DLL二进制-不是COM / OCX)。此DLL公开了某些使用方法。它不依赖某种运行时环境的Sharemem库(本机Windows DLL除外)。

我的Visual Studio是VS Express 2008(.Net 3.5),据我所知x86版本(也安装在程序文件x86中)

我有以下代码尝试将其库导入C#控制台应用程序(仅出于简化目的而使用控制台)。

Delphi声明/暴露函数具有以下声明

过程MyProc(aVal:Integer); stdcall;

如您所见,它采用一个Integer值,并且只会显示一条包含接收值的消息。

附上我的C#代码




using System;
使用System.Collections.Generic;
使用System.Linq;
使用System.Text;
使用System.Runtime.InteropServices;

命名空间ConsoleApplication1
{
class Program
{
[DllImport("MyDLL.DLL",CallingConvention = CallingConvention.StdCall,CharSet = CharSet.Ansi,EntryPoint ="MyProc")]
公共静态外部无效MyProc(int aVar);

静态void Main(string [] args)
{
字符串路径= Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
path += ";c:\\iobox\\csharp";
Environment.SetEnvironmentVariable("PATH", path);

MyProc(5);
System.Console.Write("a");
}
}
}

我收到以下错误


试图加载格式错误的程序。 (来自HRESULT的异常:0x8007000B)

我还尝试了一个具有简单测试功能的COM对象,如下所示:

功能TIQEntAPICom.IQ_API_Test( 一个值 :整数 ): HRESULT; 开始 显示消息(“用价值测试[”+诠释( 一个值 )+ ']' ); 结果 := 0; 结尾 ;

我已实例化并调用了以下函数;

pIQEntAPICom.IQEntAPIComClass F = 新的 pIQEntAPICom.IQEntAPIComClass (); F.IQ_API_Test(6 ); 但是,当执行应用程序时,我得到

正在检索 COM 班级 工厂 为了 成分 CLSID {052F5458-886B-48E3-A4CC-5C8FF6570057} 由于以下错误而失败:80040154.任何帮助将不胜感激。


PS:我知道64位进程不能调用32位进程-但这似乎不是问题。而且关于环境变量的部分是解决问题的一部分,因此暂时忽略。我检查了项目选项,似乎没有要更改的目标体系结构(64位/ x86)。
 
最佳 底部