首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求助,C#调用Dll的问题 [已结贴,结贴人:grearo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 14:35:44 楼主
    Dll中的C++函数

    C/C++ code
    int WINAPI DllInit( const DWORD v_dwNetId, const int v_iTcpPort ) { .... }


    我的C#调用
    C# code
    [DllImport("dllname.dll")] public static extern int DllInit(int v_dwNetId, int v_iServerPort);



    错误提示:无法在 DLL“dllname.dll”中找到名为“DllInit”的入口点。
    150  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 14:37:381楼 得分:5
    int WINAPI DllInit( const DWORD v_dwNetId, const int v_iTcpPort )
    {
    ....
    }
    ......

    真的不行...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mqcan
    • 等级:
    发表于:2008-05-07 14:38:382楼 得分:10
    [DllImport(  "路径",EntryPoint  =  "BuildMac",CharSet=CharSet.Ansi)] 
     
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 14:50:023楼 得分:0
    C# code
    [DllImport(@"C:\Project\bin\Debug\dllname.dll", EntryPoint = "DllGprsInit", CharSet = CharSet.Ansi)] public static extern int DllInit(int v_dwNetId, int v_iServerPort);

    还是不行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 14:58:524楼 得分:0
    再顶上去
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-07 15:00:115楼 得分:5
    可能是要静态的方法吧。。。。。。。

    我之前貌似看到过这样的问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:00:596楼 得分:0
    楼上,拜托帮我看看啊~``
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-07 15:06:207楼 得分:10
    http://topic.csdn.net/u/20071219/09/360fdadc-c92d-404a-91b0-576b42a466b9.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-07 15:06:578楼 得分:10
    http://www.cnblogs.com/xdotnet/archive/2007/08/10/csharp_cpp_dll_pinvoke.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:13:459楼 得分:50
    AFX_API_EXPORT int APIENTRY DllInit( const DWORD v_dwNetId, const int v_iTcpPort )
    这样写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    发表于:2008-05-07 15:20:3210楼 得分:5
    学习了!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:32:1611楼 得分:0

    大哥,告诉你一个残酷的消息,还是不行,应该 不是Dll的问题

    他函数中的第一个参数用的Dword我的是int有没有影响
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:36:3012楼 得分:5
    我也不知道,不过帮楼主顶一下吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:45:0113楼 得分:10
    C# code
    [DllImport(@"C:\Project\bin\Debug\dllname.dll", EntryPoint = "DllInit", CharSet = CharSet.Ansi)] public static extern int DllInit(const int v_dwNetId, const int v_iServerPort);


    ---- C# 中方法的参数类型 要和C++中方法的类型一致吧

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:47:2914楼 得分:10
    你看下编译后的函数名称,估计名称已经改变,所以说找不到入口点。你可以使用VS下的Depends.Exe查看其入口点.
    另外可以这样试试:extern c declspec(dllexport) int WINAPI DllInit( const DWORD v_dwNetId, const int v_iTcpPort )可以试试
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:48:3515楼 得分:10
    你看下编译后的函数名称,估计名称已经改变,所以说找不到入口点。你可以使用VS下的Depends.Exe查看其入口点.
    另外可以这样试试:extern c declspec(dllexport) int __stdcall WINAPI DllInit( const DWORD v_dwNetId, const int v_iTcpPort )可以试试

    在int 后加个__stdcall再
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xjh_net
    • 等级:
    发表于:2008-05-07 15:52:3116楼 得分:5
    __declspec(dllexport) int WINAPI _DllInit( const DWORD v_dwNetId, const int v_iTcpPort ) ;//输出函数
    xxx.def文件里
    LIBRARY "xxx"
    EXPORTS

    DllInit = _DllInit
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yawer
    • 等级:
    发表于:2008-05-07 16:00:3417楼 得分:5
    在c++中将你需要在C#中通过DllImport调用的函数导出来,并且一定是c++中的全局导出函数。这样你才会成功。
    extern "C" __declspec(dllexport) int  DllInitTest(const DWORD v_dwNetId, const int v_iTcpPort );
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 16:16:4218楼 得分:5
    c++函数定义必须要加上,extern "C",不然会按照c++的方式编译,函数名就会变化!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 08:07:0419楼 得分:0
    这个Dll在delphi中调用是可以的,
    Delphi(Pascal) code
    function DllGprsInit( const v_dwNetId: DWORD; const v_iServerPort: Integer ): Integer; far; stdcall; external 'Yaxon_Gps31.dll';
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 08:36:3420楼 得分:5
    用Depends看看那个DLL的入口函数有那些,说不定没有提供显性名称的访问,要用ID才行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 08:55:2621楼 得分:0
    终于找到原因了~~`
    原因是该Dll中同时调用另外一个Dll,感谢各位的帮助!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 08:56:4222楼 得分:0
    感想:
    通过该问题,我对Dll的编写和调用有了更加深入的了解!再加分100,感谢各位。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 13:44:4423楼 得分:0
    原来
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved