c#中如何访问调用C++写的DLL,有库文件.

pzrr_00 2005-11-08 09:45:10
c#中如何访问调用C++写的DLL,有库文件.
谢谢..急/
...全文
368 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
对,不是COM,只是一般的DLL
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
wuyazhe(我的宝贝叫阿刺) ( ) 信誉:100
在VC里怎么把声明改为C#的...-_-||
swordragon 2005-11-08
  • 打赏
  • 举报
回复
1、你的这个dll还调用别的dll了吗?
如果还调用了别的dll的话,请把它们放到一个目录下后再注册。

2、试试第一种方法吧,如果还不行的话,那就只好修改C++的DLL,写一个C#调用的入口了。
兔子-顾问 2005-11-08
  • 打赏
  • 举报
回复
打个标记,回头来仔细品味,我没仔细了解过。只是改改dll在vc里的声明为c#的就可以了。
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
swordragon(古道热肠) ( ) 信誉:100
唉,连注册都不行,说是没有DLLRegisterServer的输入点..怎么办?..555
jacklin_036() ( )
这样引用不需要写完整路径么?
jacklin_036 2005-11-08
  • 打赏
  • 举报
回复
C++写的不是一个COM所以不能引用,在c#里面我们可以将C++生成的dll当做是非托管代码调用,也就是通过[DllImport("sss.dll",CharSet=CharSet.Auto)]
public static void 函数名(para1 , para2)
swordragon 2005-11-08
  • 打赏
  • 举报
回复
关于第二种方法,是这样的:
1、
通过命令行的方式,注册该C++的DLL
regsvr32 DLL的完整路径

2、
在C#的项目中,引入该C++的DLL
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
那个..麻烦一下,我就是不知道怎么个写法..汗!!
3、如果1和2都不行的话,那就需要为该c++的dll增加c#调用的入口了。特别是这个,因为不是标准API,但是你提供的第2种办法更是让我看的云里雾里..能不能,最好是能举个实际例子?
swordragon 2005-11-08
  • 打赏
  • 举报
回复
我引用的时候提示我说该DLL文件不是有效的DLL文件,必须要有DLL的扩展名或COM
但我引用的是一个C++写的DLL文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

是的,C#不能直接引入C++的DLL,必须通过以上我提供的方法才可以的哟。
jxufewbt 2005-11-08
  • 打赏
  • 举报
回复
swordragon(古道热肠) 正解
beyond1680 2005-11-08
  • 打赏
  • 举报
回复
先引用这个DLL文件(如果没有注册,则来自具体的路径)
再using基本没有什么问题啊。
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
请问这是什么原因导致的?
pzrr_00 2005-11-08
  • 打赏
  • 举报
回复
我引用的时候提示我说该DLL文件不是有效的DLL文件,必须要有DLL的扩展名或COM
但我引用的是一个C++写的DLL文件
swordragon 2005-11-08
  • 打赏
  • 举报
回复
按照下面的方法试试吧:
1、对于标准的api函数
using System.Runtime.InteropServices;

[DllImport("XXX.DLL",EntryPoint="GetApiFunction",SetLastError=true)]
public static extern int GetApiFunction(
string strParaA,
StringBuilder strParaB,
int intParaC,
out int intParaD,
bool blnParaE);

C++数据类型和C#的部分对应关系:

C++ 输入输出 C#
==================================
char chr[255] O StringBuilder
KCA_DIR I int
LPCSTR I string
int I int
LPSTR O StringBuilder
int* O out int
DWORD I int
DWORD* O out int
BOOL I bool
Rc_DBMgr I IntPtr
long* O out long

2、对于非标准的api的调用:
A:引入XXX.DLL到项目;(如果Get_Name在:XXXNameSpace.YYYClass.Get_Name())
B:
XXXNameSpace.YYYClass clsYYY = new XXXNameSpace.YYYClass();
clsYYY.Get_Name();

3、如果1和2都不行的话,那就需要为该c++的dll增加c#调用的入口了。

110,533

社区成员

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

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

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