Thursday, February 08, 2007

请问c#怎么调用vc的dll?

发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Fri Feb 2 21:52:04 2007), 站内

包含头文件吗?lib吗?3x!

--

[本篇全文] [本篇作者:RUSSELLXP] [进入讨论区] [返回顶部]2发信人: RUSSELLXP (哈雷路亚), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Fri Feb 2 21:59:21 2007), 站内

MSDN P/Invoke



※ 来源:·水木社区 newsmth.net·[FROM: 166.111.18.*]

[本篇全文] [本篇作者:Felomeng] [进入讨论区] [返回顶部]3发信人: Felomeng (我爱南开), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 09:59:11 2007), 站内

解决方案资源管理器中
引用上右键->添加引用->浏览->下面就不用我说了吧
简单易行,它会自动判断dll类型
【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 包含头文件吗?lib吗?3x!




[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]4发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 10:41:13 2007), 站内

...
真的行?


【 在 Felomeng (我爱南开) 的大作中提到: 】
: 解决方案资源管理器中
: 引用上右键->添加引用->浏览->下面就不用我说了吧
: 简单易行,它会自动判断dll类型
: ...................

--



[本篇全文] [本篇作者:Felomeng] [进入讨论区] [返回顶部]5发信人: Felomeng (我爱南开), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 10:43:07 2007), 站内

不妨试试多说无益
【 在 pseudocode (I can Run!) 的大作中提到: 】
: ...
: 真的行?




※ 来源:·水木社区 newsmth.net·[FROM: 124.64.26.127]

[本篇全文] [本篇作者:Nineteen] [进入讨论区] [返回顶部]6发信人: Nineteen (在哪里倒下,就在哪里躺下!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 10:52:53 2007), 站内

貌似com可以这么用...

规则dll不行...

【 在 Felomeng (我爱南开) 的大作中提到: 】
: 不妨试试多说无益



※ 来源:·水木社区 newsmth.net·[FROM: 221.130.45.*]

[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]7发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:09:13 2007), 站内

VC 的.h文件是
#ifdef SINGLEOPTIMIZE_EXPORTS
#define SINGLEOPTIMIZE_API __declspec(dllexport)
...
SINGLEOPTIMIZE_API int _stdcall InterSectionCircle(int _ShortestGreen,int _SpaceofGreen,int _LostTime,
int _MaxCircle,int *_Capacity,int _PhaseCount,double _StopFactor,bool *_LampState,
double *_SaturationLimit,int *_FactualFlow,double &Circle,int*_LampGreen);


C#这样引入报错:在dll里面找不到该函数的入口点

[
DllImport("SingleOptimize"
, EntryPoint = "InterSectionCircle"
, CallingConvention = CallingConvention.StdCall
)
]
public static extern int InterSectionCircle(int ShortestGreen,int SpaceofGreen,int LostTime,int MaxCircle,int[] Capacity,
int PhaseCount,double StopFactor,bool[] LampState,double[] SaturationLimit,int[] FactualFlow,double Circle,int[] LampGreen);


3x!


【 在 RUSSELLXP (哈雷路亚) 的大作中提到: 】
: MSDN P/Invoke



[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]8发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:11:02 2007), 站内

前面有贴说:

P/Invoke ("DllImport") in C# could only call static method in native dll.

The best way is recompile your C++ project with C++/CLI, then you can get a
managed dll which could be directly referenced by C# project.

怎么弄呢?3x!

【 在 RUSSELLXP (哈雷路亚) 的大作中提到: 】
MSDN P/Invoke

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 包含头文件吗?lib吗?3x!


--




[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]9发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:27:50 2007), 站内

不要误导别人

【 在 Felomeng (我爱南开) 的大作中提到: 】
: 不妨试试多说无益


--

[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]10发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:29:12 2007), 站内


【 在 abcim (简单一些,直接一些) 的大作中提到: 】
VC 的.h文件是
#ifdef SINGLEOPTIMIZE_EXPORTS
#define SINGLEOPTIMIZE_API __declspec(dllexport)
...
SINGLEOPTIMIZE_API int _stdcall InterSectionCircle(int _ShortestGreen,int _SpaceofGreen,int _LostTime,
int _MaxCircle,int *_Capacity,int _PhaseCount,double _StopFactor,bool *_LampState,
double *_SaturationLimit,int *_FactualFlow,double &Circle,int*_LampGreen);


C#这样引入报错:在dll里面找不到该函数的入口点

[
DllImport("SingleOptimize"
~~~~~~~~~~~~~~dll全名,要加上扩展名

, EntryPoint = "InterSectionCircle"
, CallingConvention = CallingConvention.StdCall
)
]
public static extern int InterSectionCircle(int ShortestGreen,int SpaceofGreen,int LostTime,int MaxCircle,int[] Capacity,
int PhaseCount,double StopFactor,bool[] LampState,double[] SaturationLimit,int[] FactualFlow,double Circle,int[] LampGreen);


3x!


【 在 RUSSELLXP (哈雷路亚) 的大作中提到: 】
: MSDN P/Invoke


--




[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]11发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:29:37 2007), 站内


不行,提示不是合法的com或assembly

【 在 Felomeng (我爱南开) 的大作中提到: 】
: 解决方案资源管理器中
: 引用上右键->添加引用->浏览->下面就不用我说了吧
: 简单易行,它会自动判断dll类型
: ...................

--

[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]12发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:30:08 2007), 站内

原来加了 还是不行
unable to find an entry point named 'InterSetionCircle' in Dll 'SingleOptimize.dll'
dll已经找到,但是没找到该函数

可能是函数里面的vc数据类型跟c#的对不上?
vc的是指针数组
【 在 pseudocode (I can Run!) 的大作中提到: 】

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
VC 的.h文件是
#ifdef SINGLEOPTIMIZE_EXPORTS
#define SINGLEOPTIMIZE_API __declspec(dllexport)
...
SINGLEOPTIMIZE_API int _stdcall InterSectionCircle(int _ShortestGreen,int _SpaceofGreen,int _LostTime,
int _MaxCircle,int *_Capacity,int _PhaseCount,double _StopFactor,bool *_LampState,
double *_SaturationLimit,int *_FactualFlow,double &Circle,int*_LampGreen);


C#这样引入报错:在dll里面找不到该函数的入口点

[
DllImport("SingleOptimize"
~~~~~~~~~~~~~~dll全名,要加上扩展名

, EntryPoint = "InterSectionCircle"
, CallingConvention = CallingConvention.StdCall
)
]
public static extern int InterSectionCircle(int ShortestGreen,int SpaceofGreen,int LostTime,int MaxCircle,int[] Capacity,
int PhaseCount,double StopFactor,bool[] LampState,double[] SaturationLimit,int[] FactualFlow,double Circle,int[] LampGreen);


3x!


【 在 RUSSELLXP (哈雷路亚) 的大作中提到: 】

[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]13发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:32:44 2007), 站内

用depends确认一下,你的dllexort出来的函数名是那个吗?

http://www.pinvoke.net/

有很多例子

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 原来加了 还是不行
: dll已经找到,但是没找到该函数
: 可能是函数里面的vc数据类型跟c#的对不上?
: ...................


[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]14发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:34:34 2007), 站内

VC里面这样把.h文件include进来就成功了

#include "./SingleOptimize.h"


int result;
result=InterSectionCircle(ShortestGreen,SpaceofGreen,LostTime,MaxCircle,Capacity,PhaseCount,StopFactor,LampState,SaturationLimit,FactualFlow,Circle,LampGreen);


【 在 pseudocode (I can Run!) 的大作中提到: 】
用depends确认一下,你的dllexort出来的函数名是那个吗?

http://www.pinvoke.net/

有很多例子

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 原来加了 还是不行
: dll已经找到,但是没找到该函数
: 可能是函数里面的vc数据类型跟c#的对不上?
: ...................

--



[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]15发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:36:02 2007), 站内


可能数据类型不一致的关系?
我前面调c++ builder ,delphi的都可以,不过没涉及到指针的数据类型

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: VC里面这样把.h文件include进来就成功了
: #include "./SingleOptimize.h"
: int result;
: ...................

[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]16发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:37:10 2007), 站内

vc 和c#不一样的

你先确认一下
【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: VC里面这样把.h文件include进来就成功了
: #include "./SingleOptimize.h"
: int result;
: ...................

[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]17发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:37:45 2007), 站内

数据类型不一致顶多会导致你调用的时候出错,不会说找不到函数

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 可能数据类型不一致的关系?
: 我前面调c++ builder ,delphi的都可以,不过没涉及到指针的数据类型


[本篇全文] [本篇作者:hBifTs] [进入讨论区] [返回顶部]18发信人: hBifTs (OS真过瘾...), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:41:25 2007), 站内

非COM的dll是绝对不行的!



【 在 Felomeng (我爱南开) 的大作中提到: 】
: 不妨试试多说无益



[本篇全文] [本篇作者:grapl] [进入讨论区] [返回顶部]19发信人: grapl (grapl), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:42:37 2007), 站内

是用C++写的吗?定义extern “C”了吗?
【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: VC 的.h文件是
: #ifdef SINGLEOPTIMIZE_EXPORTS
: #define SINGLEOPTIMIZE_API __declspec(dllexport)
: ...................



[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]20发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 11:43:19 2007), 站内

估计没有
所以我才让他用depends确认一下

【 在 grapl (grapl) 的大作中提到: 】
: 是用C++写的吗?定义extern “C”了吗?
'
发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 12:07:49 2007), 站内



怎么操作?没有那个dll源码,只是有 VC调用的例子,
VC调用的话,dll里面没写 extern “C都可以吗?

3X!
【 在 pseudocode (I can Run!) 的大作中提到: 】
: 估计没有
: 所以我才让他用depends确认一下



[本篇全文] [本篇作者:abcim] [进入讨论区] [返回顶部]22发信人: abcim (简单一些,直接一些), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 12:08:55 2007), 站内


数据类型不一致会否说是另外一个函数,类似函数重构
3X!
【 在 pseudocode (I can Run!) 的大作中提到: 】
数据类型不一致顶多会导致你调用的时候出错,不会说找不到函数

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 可能数据类型不一致的关系?
: 我前面调c++ builder ,delphi的都可以,不过没涉及到指针的数据类型



[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]23发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 12:13:14 2007), 站内

没有extern "C"的话,用vc调用是可以的,但是c#不行

你看depends,然后看一下那个函数的ordinal是多少


【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 怎么操作?没有那个dll源码,只是有 VC调用的例子,
: VC调用的话,dll里面没写 extern “C都可以吗?
: 3X!
: ...................


[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]24发信人: pseudocode (I can Run!), 信区: DotNET
标 题: Re: 请问c#怎么调用vc的dll?
发信站: 水木社区 (Sat Feb 3 12:13:26 2007), 站内


no

【 在 abcim (简单一些,直接一些) 的大作中提到: 】
: 数据类型不一致会否说是另外一个函数,类似函数重构
: 3X!
: 数据类型不一致顶多会导致你调用的时候出错,不会说找不到函数
: ...................

--

※ 来源:·水木社区 newsmth.net·[FROM: 222.129.32.*]

No comments: