如果是非托管的,就用DllImport,举例
using System;
using System.Runtime.InteropServices;
class MainApp
[DllImport("Kernel32")] //读取动态库文件
public static extern int GetProcAddress(int handle, String funcname);
给你讲一下我的经验:
首先 你在C#中调用的 是C++ 写的一个动态库。比如Kernel32.dll 中的 函数;
这个函数用C++写 有如下要求:
1、 必须为全局函数
2、 函数参数 必须为基本类型,也就是C++ 和C#都有的类型,否则你在public static extern int GetProcAddress(int handle, String funcname);
这里没有办法声明。 其余的 没什么了;
先前用VC写的程序生成的DLL,C#里能够调用么?
可以的话,在VC里传入参数为CString,而C#里是string,怎么传参数呢?
再者就是问,用VC写的DLL如果是一个导出类,而不是函数接口,C#里可以直接调用么?
第一个问题我遇到过, 可用如下方法解决:
VC++ 中为: int Set(char** str,int n); //将 String 改成 char** , C# 中没有与String对应的类型
C# 中为: int Set(ref string str,int n);
VC++ 中的 BOOL 类型对应 C# 中的 System.Int32 类型, 建议改动一下参数类型吧.
第二个问题,生成的DLL里的函数在一个类里面,这样的话在C#里需要实例化那个类么?怎么做
比如说,类solution里有函数int getch(int a);
我怎么调用这个getch函数??
建议在C++中另外写个函数封装一下, 如:
int Dllgetch(int a)
{
solution st = //实例化 类solution
return st.getch(a);
}
这个 Dllgetch(int a) 就可以提取出来供 C# 调用.
你的方法可以,我也解决了
将CString 改成了LPCTSTR
BOOL在C#中对应的是Boolean
****************************上段摘自jingshuaizh回复提问者的答案,讲得很详细**********************
还有你可以参考这里:http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx
DLL文件放置位置:
(1)项目文件夹下的../bin/Debug/
(2)系统文件夹下的C:/WINDOWS/system32
如果能确定位置是正确的,那么就得看看是不是你调用的DLL文件是不是使用到其他DLL文件里的内容,这点很关键,在找不到其他问题的情况下这种情况的可能性高过百分之九十,这只是我遇到的情况,要是有其他情况,可以发来一起讨论。。。
网上看了一些都是调用
c++
写函数能不能实现
c#
使用
c++
写的类各位高手请赐教
解决方案 »
类的有一个成员函数,是返回这个类的指针,那么在
C#
里面就是一个INTPTR,它是什么你不用管。然后
C++
文件里面再定义几个函数,专门用于处理这个类的对像的操作,参数就是类对像的指针。这样你在
C#
层调用
C++
的这个函数,并将准备好的类对像的指针传回去就好了。这种方法,安全,方便,而且……你那些查到的使用C
<br /> Oramts.
dll
文件公开登记 Oracle 连接所涉及到在通过 Microsoft 分布式事务处理协调器 (MSDTC) 启动的事务中的公共 API。 在事务处理环境中运行时, System.Data.OracleClient 程序集调用这些 API。 <br /> System.Data.OracleClient 程序集的早期版本不支持分布式的事务。 因此,该依赖项不存在 System.Data.OracleClient 程序集版本 1.1 之前。
部署网站在服务后,报这个错误。原因是因为在程序处理中使用了oracle的事务,但是服务器没有安装必要的组件导致的。
解决方案:
Oramts.
dll
文件不是作为默认安装包含在安装 Oracle 客户端连接软件时。 若要安装此组件必须单击以选中 Oracle Services for Microsoft Transaction Server 在安装 Oracle 客户端连接软件时复选框。
由于使用别人的
Dll
,导出的是一个实体类,在
C#
里封送很难,百度下,有个朋友回复一篇英文的,虽然不一定使用,但可以作为一个知识点,现把原文贴下:
c#
调用
C++
写的
dll
导出类,包含继承,重载等详细介绍(转载)忘了出处InheritingFromaNative
C++
Classin
C#
Hi,thisisJimSpringfield,anarchitectonthe...
网上看了一些都是调用
c++
写函数能不能实现
c#
使用
c++
写的类各位高手请赐教
解决方案 »
类的有一个成员函数,是返回这个类的指针,那么在
C#
里面就是一个INTPTR,它是什么你不用管。然后
C++
文件里面再定义几个函数,专门用于处理这个类的对像的操作,参数就是类对像的指针。这样你在
C#
层调用
C++
的这个函数,并将准备好的类对像的指针传回去就好了。这种方法,安全,方便,而且……你那些查到的使用C
今天尝试着使用System.Transactions.TransactionScope来管理事务,因为看了官方的样例:分布式事务微软样例代码,很高兴,可以支持分布式事务,但是之后看到一句话就凉了,原话如下:
“由 System.Transactions 命名空间中的类提供的基础结构通过支持在 SQL Server、ADO.NET、消息队列 (MSMQ) 和 Microsoft 分布式事...
在调用oracle时出现
无法
加载
oramts.
dll
这时可以尝试以下方法:先要看在连接字符串中.是否添加了enlist=false;通常不添加这个属性..系统将不会去自动调用oramts.
dll
详情请看http://malixiaomage0801.spaces.live.com/blog/cns!4FDC316C4BD67867!2042.entry1. 删去ORACLE