c++builder怎样调用c#作的dll啊 _net技术 - c# - csdn社区 community_csdn_net.htm
来自「Borland C++ 动态链接库调用方法使用」· HTM 代码 · 共 359 行 · 第 1/2 页
HTM
359 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0048)http://topic.csdn.net/t/20030902/08/2213237.html -->
<HTML lang=zh-CN xml:lang="zh-CN"
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>C++Builder怎样调用C#作的DLL啊? .NET技术 / C# - CSDN社区 community.csdn.net</TITLE>
<META content=all name=robots>
<META http-equiv=Content-Language content=zh-CN>
<META http-equiv=Content-Type content="text/html; charset=utf-8"><LINK
href="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/topic.css"
type=text/css rel=stylesheet>
<SCRIPT
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/Topic.js"
type=text/javascript></SCRIPT>
<META content=".net c# c++builder 函数 动态库 指针 应用程序 开发平台 文件 连接 .NET技术 C#"
name=Keywords>
<META content=最好能给一个例子. name=description>
<META content="MSHTML 6.00.2900.3157" name=GENERATOR></HEAD>
<BODY>
<DIV id=wrapper>
<DIV id=innerWrapper>
<TABLE class=CSDN-PHF id=CSDNPHL cellSpacing=1 cellPadding=0 border=0>
<TBODY>
<TR>
<TD><A href="http://www.csdn.net/" rel=external>CSDN首页</A></TD>
<TD><A href="http://news.csdn.net/" rel=external>新闻</A></TD>
<TD><A href="http://bbs.csdn.net/" rel=external><STRONG>论坛</STRONG></A></TD>
<TD><A href="http://groups.csdn.net/"
rel=external><STRONG>小组</STRONG></A></TD>
<TD><A href="http://blog.csdn.net/"
rel=external><STRONG>Blog</STRONG></A></TD>
<TD><A href="http://dev.csdn.net/" rel=external>文档</A></TD>
<TD><A href="http://download.csdn.net/" rel=external>下载</A></TD>
<TD><A href="http://book.csdn.net/" rel=external>读书</A></TD>
<TD><A href="http://tag.csdn.net/"
rel=external><STRONG>Tag</STRONG></A></TD>
<TD><A href="http://wz.csdn.net/" rel=external><STRONG>网摘</STRONG></A></TD>
<TD><A href="http://search.csdn.net/"
rel=external><STRONG>搜索</STRONG></A></TD>
<TD><A href="http://dotnet.csdn.net/"
rel=external><STRONG>.NET</STRONG></A></TD>
<TD><A href="http://java.csdn.net/"
rel=external><STRONG>Java</STRONG></A></TD>
<TD><A href="http://gamedev.csdn.net/" rel=external>游戏</A></TD>
<TD><A href="http://live.csdn.net/" rel=external>视频</A></TD>
<TD><A href="http://job.csdn.net/" rel=external>人才</A></TD>
<TD><A href="http://prj.csdn.net/" rel=external>外包</A></TD>
<TD><A href="http://www.dearbook.com.cn/" rel=external>第二书店</A></TD>
<TD><A href="http://www.programmer.com.cn/"
rel=external>程序员</A></TD></TR></TBODY></TABLE>
<DIV id=logo><!--
<table border="0" cellspacing="0" cellpadding="0" width="770px"><tr><td style="text-align:left;"><a
href="http://community.csdn.net/" rel="external"><img class="logo" src="http://www.csdn.net/ui/images/logo_csdn.gif" alt="CSDN社区" /></a></td><td style="text-align:center"><a
href="http://g.csdn.net/5022240" rel="external"><img class="logo" src="http://topic.csdn.net/images/adv/468-60.gif" alt="" style="margin:0" /></a></td><td style="text-align:right"><a
href="http://g.csdn.net/5021657" rel="external"><img src="http://topic.csdn.net/images/adv/120_60.gif" alt="" style="margin:0"/></a></td>
</tr><tr id="bigFlash" style="text-align:center"><td colspan="3"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="760" height="300">
<param name="movie" value="http://topic.csdn.net/images/adv/760-300.swf" />
<param name="quality" value="high" />
<embed src="http://topic.csdn.net/images/adv/760-300.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="760" height="300"></embed>
</object></td></tr>
</table>
<script type="text/javascript">setTimeout("document.getElementById('bigFlash').style.display='none'", 5000);</script>
--><A href="http://community.csdn.net/" rel=external><IMG class=logo alt=CSDN社区
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/logo_csdn.gif"></A><A
href="http://job.csdn.net/Jobs/ViewCompany/f9c75c9f2ad14404a604669b757b9ed0.aspx"
rel=external><IMG alt=""
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/468.60_csdn.gif"></A><A
href="http://g.csdn.net/5021657" rel=external><IMG alt=""
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/120_60.gif"></A>
<IMG style="DISPLAY: none" alt=""
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/pv.aspx">
</DIV>
<DIV id=navigation>
<DIV id=search>
<DIV id=innerSearch><INPUT id=key onfocus="value=''"><A
onclick="return Search()"
href="http://topic.csdn.net/t/20030902/08/2213237.html#">搜索</A> | <A
title=功能强大的网络收藏夹,一秒钟操作就可以轻松实现保存带来的价值、分享带来的快乐
href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏</A> | <A
onclick="return Print()"
href="http://topic.csdn.net/t/20030902/08/2213237.html#">打印</A> | <A
onclick="return Close()"
href="http://topic.csdn.net/t/20030902/08/2213237.html#">关闭</A> </DIV></DIV>
<DIV><A class=CSDNRoom href="http://community.csdn.net/"
rel=external>CSDN社区</A> > <A
href="http://community.csdn.net/Expert/ForumsList.asp?typenum=1&roomid=52"
rel=external>.NET技术</A> > <A
href="http://community.csdn.net/Expert/ForumList.asp?typenum=1&roomid=5201"
rel=external>C#</A> </DIV></DIV>
<DIV id=mainWrapper>
<DIV id=pageContent>
<DIV id=innerContent>
<H1>C++Builder怎样调用C#作的DLL啊?</H1>
<DIV class=author><A class=anchor name=Top>楼主</A>WYJBCB(阿菜)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button>2003-09-02
08:40:04 在 .NET技术 / C# 提问</DIV>
<P>最好能给一个例子. <SPAN>问题点数:50、回复次数:13</SPAN><A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A> </P>
<DIV class=tagad><IFRAME
src="C++Builder怎样调用C#作的DLL啊 _NET技术 - C# - CSDN社区 community_csdn_net.files/Board.htm"
frameBorder=0 scrolling=no></IFRAME></DIV>
<H3><STRONG><A class=anchor name=r_15073409>1 楼</A>COKING(天晴)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button></STRONG><SPAN>回复于
2003-09-02 09:08:29 得分 0 </SPAN></H3>
<P>你你你?<A href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15074472>2 楼</A>WYJBCB(阿菜)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2003-09-02 09:38:53 得分 0 </SPAN></H3>
<P>楼上的兄台,不知何意?<A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15078236>3 楼</A>Iamsnowgirl(snowgirl)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button></STRONG><SPAN>回复于
2003-09-02 11:18:51 得分 <EM>6</EM></SPAN></H3>
<P>动态连接库(dll)的调用主要有两种方式:隐式链接和显式链接。隐式 <BR> 链接是常用方式。
<BR> <BR> 如果应用程序和动态库是分别在不同开发平台上编制的,动态库的导入 <BR>
库(lib文件)可能会与应用程序的开发平台所要求的导入库格式不相容,从而在应用程序与动态库隐式链接时,出现程序链接错误:contains
invalid OMF record。例如在C++Builder开发平台上链接Visual
C++制作的动态库时,就会出现上述的错误。解决这一问题,可以采用两种方法:显式连接法和使用C++Builder中提供的导入库生成工具。
<BR> <BR>
显式连接:显式连接不需要在工程中加入导入库和相应的头文件,只需要把动态库放入指定的目录下。在应用程序中通过函数调用显式的装载和卸掉DLL,通过函数指针来调用DLL的导出函数。
<BR> <BR> 步骤: <BR> <BR>
1. 调用LoadLibrary函数装载DLL并得到模块句柄; <BR> <BR>
2. 调用GetProcAddress函数获取指定导出函数的指针; <BR> <BR>
3. 用这个函数的指针调用该函数; <BR> <BR> 4.
使用完毕后,用FreeLibrary释放DLL。 <BR> <BR> 例子:
<BR> <BR> 用VC++制作一个动态库: <BR> <BR>
选new→Project→Win32—Dynamic—Link Library,加入addit.cpp <BR>
<BR> extern ″C″ <BR> <BR> {
void —declspec( dllexport ) addit(int
a, int b, int *c) <BR>
<BR> { *c = a + b;
<BR> <BR> } <BR> <BR> }
<BR> <BR> addit.h <BR>
<BR> extern ″C″ <BR> <BR> {void
addit(int a, int b, int *c);}
<BR> <BR>
编译链接生成addit.dll和addit.lib。在C++Builder程序中调用addit函数。 <BR>
<BR> C++Builder程序中: <BR> <BR> {HINSTANCE
handle; //DLLa模块的句柄 <BR> <BR>
FARPROC lpFarProc; <BR> <BR> void
(*lpaddit)(int,int,int *); <BR> <BR>
//指向addit函数的指针 <BR> <BR> int ntemp;
<BR> <BR> handle = LoadLibrary(″addit.dll″);
<BR> <BR> //装载addit.dll, 得到该库句柄
<BR> <BR> //addit.dll位于当前目录下 <BR>
<BR> lpFarProc = GetProcAddress(handle,″addit″);
<BR> <BR> //得到指向函数addit的指针 <BR>
<BR> lpaddit = (void(—cdecl *)(int, int,
int *))lpFarProc; //指针类型转换 <BR>
<BR> lpaddit(2,3,&ntemp); //使用addit函数 <BR>
<BR> FreeLibrary(handle); <BR> <BR>
//将addit.dll从程序中卸掉 <BR> <BR> } <BR>
<BR> 此程序在VC++ 5.0 和C++Builder 3.0下通过。
<BR> <BR> 使用C++Builder中提供的导入库生成工具:先预处理,后隐式链接。
<BR> <BR> 步骤: <BR> <BR>
1.用C++Builder提供的implib.exe工具重新生成该动态库(xxx.dll)的导入库(xxx.lib)。命令如下:
<BR> <BR> implib addit.lib addit.dll。
<BR> <BR>
addit.dll为已有动态库,addit.lib为要生成的导入库。由此生成的导入库addit.lib格式与C++Builder开发平台是相容的;
<BR> <BR> 2.在动态库的头文件addit.h中,对其输出函数重新说明,语句如下:
<BR> <BR> extern —stdcall void
addit( int a, int b, int *c);
<BR> <BR>
3.然后采用隐式链接法,将重新生成的导入库(addit.lib)和重新说明的头文件(addit.h)加入到C++Builder应用程序的工程项目中,进行编译和连接。
<BR> <BR> addit.dll按上述步骤操作,在VC++ 5.0
和C++Builder 3.0下通过。 <BR> <A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15078714>4 楼</A>WYJBCB(阿菜)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2003-09-02 11:30:56 得分 0 </SPAN></H3>
<P>To Iamsnowgirl(snowgirl) <BR>
谢谢,不过这篇文章我也有,他对C#的调用好像不行.<A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15093641>5 楼</A>yhz(耗子)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button></STRONG><SPAN>回复于
2003-09-02 20:13:48 得分 <EM>6</EM></SPAN></H3>
<P>不要随便用C#写DLL。 <BR> <BR> 因为它生成的是托管代码。要装.net
freamework(是这么写的吧?) <BR> 用 VC.net 写 DLL
的时候,还是选择静态 MFC DLL,比较好。 <BR> <BR>
如果你确认你的调用没有问题,我想很可能是这个问题。<A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15094081>6 楼</A>zjqyb(风清扬*任它溺水三千,我只取一瓢饮*)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button></STRONG><SPAN>回复于
2003-09-02 20:33:24 得分 <EM>6</EM></SPAN></H3>
<P>要C++Builder7.0以上才能 <BR> 调用C#作的DLL<A
href="http://topic.csdn.net/t/20030902/08/2213237.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_15094609>7 楼</A>ThinkX(秋天的树)<INPUT class=user1 title="一级用户 该版得分小于等于100分" type=button></STRONG><SPAN>回复于
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?