WPF的应用,换到目标机器上运行时,找不到DLL的入口

时间:2021-11-09 15:57:43
楼主写了一些DLL和一个WPF的应用,在开发机上可以使用,但是在目标机器上就找不到DLL的入口。
在WPF里面是这样引用的:

 public class MyTransDll
    {
        [DllImport("MyTransDll.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
       public static extern int MyTrans([MarshalAs(UnmanagedType.LPStr)]StringBuilder exportpath, [MarshalAs(UnmanagedType.LPStr)]StringBuilder importpath);
    }


在网上没找到,直接来问大家了,有知道的朋友说交流一下。THX

12 个解决方案

#1


dll文件放到目标机器上了吗.

放到相应的路径上了吗

#2


两边的MyTransDll.dll是同一个吗?

#3


引用 1 楼 liuqian4243 的回复:
dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;

#4


引用 1 楼 liuqian4243 的回复:
dll文件放到目标机器上了吗.

放到相应的路径上了吗

放在目标机器上了,EXE和DLL都在一个目录下。
我甚至用installshield来做过一个安装包,同样的问题。

#5


具体错误是什么?

MyTransDll.dll依赖于什么类库吗?

一般来讲需要安装VC运行时

例如VS2010的话,需要安装:
Microsoft Visual C++ 2010 Redistributable Package (x86)
https://www.microsoft.com/en-au/download/details.aspx?id=5555

#6


http://bbs.csdn.net/topics/30029784
这里面已经包含了各种可能

#7


你的MyTransDll.dll  是否在Debug或者Release 文件夹下?

#8


引用 2 楼 shingoscar 的回复:
两边的MyTransDll.dll是同一个吗?


是一个DLL,这个确定。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;



我这样处理了:DLL工程的properity里改不了,我把EXE的改成X86的模式了。
但是依然不行。
我依照这个帖子的方法做了。地址:http://www.cnblogs.com/zhuweisky/archive/2013/01/09/2852431.html
可是有很多个msvcp80.dll
不知怎么办了。。。问题依然没有解决

#9


你的错误提示究竟是什么?

#10


我找到解决方案了,3楼是正解,非常感谢。之前没有成功的原因是有另外一个小BUG。。。。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;


非常感谢大家的帮助,又给我上了很多的课。分数还是人人有份。。。

#11


引用 9 楼 shingoscar 的回复:
你的错误提示究竟是什么?


提示是 无法加载DLL

#12


引用 8 楼 wangzhihongji 的回复:
Quote: 引用 2 楼 shingoscar 的回复:

两边的MyTransDll.dll是同一个吗?


是一个DLL,这个确定。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;



我这样处理了:DLL工程的properity里改不了,我把EXE的改成X86的模式了。
但是依然不行。
我依照这个帖子的方法做了。地址:http://www.cnblogs.com/zhuweisky/archive/2013/01/09/2852431.html
可是有很多个msvcp80.dll
不知怎么办了。。。问题依然没有解决


msvcp80.dll就是运行时里面的东西,安装我5楼说的应该可以。

另外要注意的是,安装的运行时是release的,因此你的C#程序也需要release的才可以。

#1


dll文件放到目标机器上了吗.

放到相应的路径上了吗

#2


两边的MyTransDll.dll是同一个吗?

#3


引用 1 楼 liuqian4243 的回复:
dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;

#4


引用 1 楼 liuqian4243 的回复:
dll文件放到目标机器上了吗.

放到相应的路径上了吗

放在目标机器上了,EXE和DLL都在一个目录下。
我甚至用installshield来做过一个安装包,同样的问题。

#5


具体错误是什么?

MyTransDll.dll依赖于什么类库吗?

一般来讲需要安装VC运行时

例如VS2010的话,需要安装:
Microsoft Visual C++ 2010 Redistributable Package (x86)
https://www.microsoft.com/en-au/download/details.aspx?id=5555

#6


http://bbs.csdn.net/topics/30029784
这里面已经包含了各种可能

#7


你的MyTransDll.dll  是否在Debug或者Release 文件夹下?

#8


引用 2 楼 shingoscar 的回复:
两边的MyTransDll.dll是同一个吗?


是一个DLL,这个确定。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;



我这样处理了:DLL工程的properity里改不了,我把EXE的改成X86的模式了。
但是依然不行。
我依照这个帖子的方法做了。地址:http://www.cnblogs.com/zhuweisky/archive/2013/01/09/2852431.html
可是有很多个msvcp80.dll
不知怎么办了。。。问题依然没有解决

#9


你的错误提示究竟是什么?

#10


我找到解决方案了,3楼是正解,非常感谢。之前没有成功的原因是有另外一个小BUG。。。。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;


非常感谢大家的帮助,又给我上了很多的课。分数还是人人有份。。。

#11


引用 9 楼 shingoscar 的回复:
你的错误提示究竟是什么?


提示是 无法加载DLL

#12


引用 8 楼 wangzhihongji 的回复:
Quote: 引用 2 楼 shingoscar 的回复:

两边的MyTransDll.dll是同一个吗?


是一个DLL,这个确定。

引用 3 楼 lihui398 的回复:
Quote: 引用 1 楼 liuqian4243 的回复:

dll文件放到目标机器上了吗.

放到相应的路径上了吗


编译是X86方式吗?有的机器是32位机器,有的64位机器,编译方式时也很重要;



我这样处理了:DLL工程的properity里改不了,我把EXE的改成X86的模式了。
但是依然不行。
我依照这个帖子的方法做了。地址:http://www.cnblogs.com/zhuweisky/archive/2013/01/09/2852431.html
可是有很多个msvcp80.dll
不知怎么办了。。。问题依然没有解决


msvcp80.dll就是运行时里面的东西,安装我5楼说的应该可以。

另外要注意的是,安装的运行时是release的,因此你的C#程序也需要release的才可以。