专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Delphi

winfrom调用delphi写的dll,该怎么解决

发布时间:2011-06-24 19:41:44 文章来源:www.iduyao.cn 采编人员:星星草
winfrom调用delphi写的dll
有delphi写的一个dll,dll中有个com控件。
问题是我现在引用了在winfrom中报错,错误信息:无法在dll中找到"ConnectReq"入口点

C# code
        [DllImport("SPCUserInterface.dll", EntryPoint = "ConnectReq", SetLastError = true, CharSet = CharSet.Ansi,
            CallingConvention = CallingConvention.StdCall, ExactSpelling = true)]
        public static extern bool connectReq();






文档中有方法:

方法名: ConnectReq
参数: 无
返回值: VARIANT_BOOL
  True:成功
  False:失败

------解决方案--------------------
DLL 入口点
在创建 DLL 时,可以有选择地指定入口点函数。当进程或线程将它们自身附加到 DLL 或者将它们自身从 DLL 分离时,将调用入口点函数。您可以使用入口点函数根据 DLL 的需要来初始化数据结构或者销毁数据结构。此外,如果应用程序是多线程的,则可以在入口点函数中使用线程本地存储 (TLS) 来分配各个线程专用的内存。下面的代码是一个 DLL 入口点函数的示例。

BOOL APIENTRY DllMain(
HANDLE hModule, // Handle to DLL module
 DWORD ul_reason_for_call, // Reason for calling function
 LPVOID lpReserved ) // Reserved
{
 switch ( ul_reason_for_call )
 {
case DLL_PROCESS_ATTACHED:
// A process is loading the DLL.
break;
case DLL_THREAD_ATTACHED:
// A process is creating a new thread.
break;
case DLL_THREAD_DETACH:
// A thread exits normally.
break;
case DLL_PROCESS_DETACH:
// A process unloads the DLL.
break;
 }
 return TRUE;
}

当入口点函数返回 FALSE 值时,如果您使用的是加载时动态链接,则应用程序不启动。如果您使用的是运行时动态链接,则只有个别 DLL 不会加载。

入口点函数只应执行简单的初始化任务,不应调用任何其他 DLL 加载函数或终止函数。例如,在入口点函数中,不应直接或间接调用 LoadLibrary 函数或 LoadLibraryEx 函数。此外,不应在进程终止时调用 FreeLibrary 函数。

注意:在多线程应用程序中,请确保将对 DLL 全局数据的访问进行同步(线程安全),以避免可能的数据损坏。为此,请使用 TLS 为各个线程提供唯一的数据
------解决方案--------------------
因为你的 ExactSpelling= true,所以我怀疑是ConnectReq这个名字的拼写有错误或大小写不一致

找个查看 dll的工具,看看是不是大小写有问题
------解决方案--------------------
COM不能使用DllImport调用
要注册COM后引用再调用
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: