C# windows服务调用c++的dll

wk_super 2015-08-23 09:56:44
提示dll找不到....而同样的程序在exe程序里是好的....是什么原因? 放到服务程序 的同一个文件夹也不行....
服务调用dll还需要注意哪里没有...

        [DllImport("hdAPI.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int nt_connect(string szIP, ushort nPort, ref Int32 pSrvHandle, int nTimeOut);


这是调用的代码....

        private int nt_connect()
{
try
{
nRet = iHyerDBApi.nt_connect(IP, port, ref pSrvHandle, nTimeOut);
}
catch (Exception ex)
{
throw new Exception("打开数据源异常:" + IP.ToString() + "," + port.ToString() + "," + pSrvHandle.ToString() + ex.Message);
}
return nRet;
}


这段代码写在 OnStart里......总报异常
...全文
385 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2015-08-24
  • 打赏
  • 举报
回复
DllImport会按照顺序自动去寻找的地方: 1、exe所在目录 2、System32目录 3、环境变量目录 所以只需要把引用的DLL 拷贝到这三个目录下 就可以不用写路径。 当然,用 [DllImport(@"C:\Test\MyDll.dll")]这样指定DLL的绝对路径也可以 如果因为限制,dll没法使用绝对路径,就只能是LoadLibrary 方法 LoadLibrary,返回错误代码为126的时候, 首先要考虑缺少调用库的依赖库文件。
ajianchina 2015-08-23
  • 打赏
  • 举报
回复
换LoadLibrary调用,自己去看使用方法,我手机打代码太费劲
ajianchina 2015-08-23
  • 打赏
  • 举报
回复
这个返回结果我没遇到过 不过你通过SxsTrace看下跟踪记录就能一目了然了。 不过我搜索了一些类似情况,你可以参考一下 http://blog.csdn.net/dragoo1/article/details/45641529
wk_super 2015-08-23
  • 打赏
  • 举报
回复
LoadLibrary GetLastError 后 返回126 路径都是对的...在控制台能用
crystal_lz 2015-08-23
  • 打赏
  • 举报
回复
什么异常啊 你也不说。。。
ajianchina 2015-08-23
  • 打赏
  • 举报
回复
VS中把Build Platform target从x86改成了x64试一下,如果不行通过SxsTrace工具看下跟踪信息 使用方法 http://blog.csdn.net/lly20000/article/details/8133584
wk_super 2015-08-23
  • 打赏
  • 举报
回复
在吗??????
wk_super 2015-08-23
  • 打赏
  • 举报
回复
LoadLibrary 在一个控制台中能正确获取到dll , 而在服务里 返回为0 是什么原因?
wk_super 2015-08-23
  • 打赏
  • 举报
回复
谢谢了在实验中

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧