⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc调用c#写的com+组件 - 小雄的家 - csdnblog.htm

📁 Borland C++ 动态链接库调用方法使用
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<DIV class=post>
<DIV class=postTitle><A 
href="http://blog.csdn.net/panyaxiong/archive/2007/04/25/1585052.aspx"><IMG 
height=13 src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/authorship.gif" width=15 
border=0>&nbsp;VC调用C#写的COM+组件</A> </DIV>
<DIV class=postText>
<P>&nbsp;首先对COM+组件的写法需要注意以下几点:</P>
<P>1.接口,事件,方法,属性必须是public,</P>
<P>2.方法和属性必须在接口中声明,事件也必须在事件接口中声明.</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P>否则将在VC中无法调用,在接口中声明主要是为了在COM 中的vtab中.</P></BLOCKQUOTE>
<P dir=ltr>3.必须对接口中的方法,属性,事件前声明[DispId(1)]</P>
<P dir=ltr>4.每个接口都必须有一个GUID</P>
<P dir=ltr>5.而且项目一定需要是COM Interop,并且具有强命名</P>
<P dir=ltr>示例:</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P dir=ltr>//接口声明</P>
  <P 
  dir=ltr>[Guid("694C1820-04B6-4988-928F-FD858B95C880")]<BR>&nbsp;&nbsp;&nbsp; 
  public interface DBCOM_Interface<BR>&nbsp;&nbsp;&nbsp; 
  {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [DispId(1)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Init(string 
  userid , string password);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [DispId(2)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool 
  ExecuteSelectCommand(string 
  selCommand);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [DispId(3)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool 
  NextRow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [DispId(4)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void 
  ExecuteNonSelectCommand(string 
  insCommand);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  [DispId(5)]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string 
  GetColumnData(int pos);<BR>&nbsp;&nbsp;&nbsp; }</P>
  <P dir=ltr>&nbsp;// //&nbsp;事件接口声明<BR>&nbsp;&nbsp;&nbsp; 
  [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"), <BR>&nbsp;&nbsp;&nbsp; 
  InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]<BR>&nbsp;&nbsp;&nbsp; 
  public interface DBCOM_Events <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
  }</P>
  <P dir=ltr>//对于实现类的声明</P>
  <P dir=ltr>&nbsp;&nbsp;&nbsp; 
  [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E")]<BR>&nbsp;&nbsp;&nbsp; 
  ClassInterface(ClassInterfaceType.None),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P>
  <P dir=ltr>&nbsp;//不产生类接口,如果需要产生声明为<FONT 
  face="Courier New">ClassInterfaceAttribute</FONT><BR>&nbsp;&nbsp;&nbsp; 
  ComSourceInterfaces(typeof(DBCOM_Events))]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P>
  <P dir=ltr>&nbsp; //声明产生一个COMSource的事件列表<BR>&nbsp;&nbsp;&nbsp; public class 
  DBCOM_Class : DBCOM_Interface<BR>&nbsp;&nbsp;&nbsp; {</P>
  <P dir=ltr>&nbsp;&nbsp;&nbsp; }</P></BLOCKQUOTE>
<P dir=ltr>在VC中的调用方法如下:</P>
<P dir=ltr>在VC++中进行组件调用的步骤(以DBCOM.tlb为例):</P>
<P dir=ltr>1、在头文件中导入类型库tlb  </P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P dir=ltr>#import “DBCOM.tlb” </P></BLOCKQUOTE>
<P dir=ltr>2、初始化COM以及产生智能指针(一般是在需要调用COM组件中提供的方法时就需要产生指向该接口的智能指针) </P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P dir=ltr>CoInitialize(NULL);//初始化COM </P>
  <P dir=ltr>DBCOM::DBCOM_Interface p((__uuidof(DBCOM::DBCOM_Class ))); 
  //名字空间::接口Ptr p((__uuidof(名字空间::类))) </P>
  <P dir=ltr>DBCOM::DBCOM_Interface * Test=p; //名字空间::接口 
指向接口的智能指针</P></BLOCKQUOTE>
<P dir=ltr>3、调用COM中的方法</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <P dir=ltr>&nbsp;_bstr_t m_string=”select * from user”; //传入参数 </P>
  <P dir=ltr>bool bRet=Test-&gt; 
  ExecuteSelectCommand(m_string);//调用ExecuteSelectCommand方法</P></BLOCKQUOTE>
<P dir=ltr>4、释放环境</P>
<P dir=ltr>&nbsp;</P><BR><BR>
<P id=TBPingURL>Trackback: 
http://tb.blog.csdn.net/TrackBack.aspx?PostId=1585052</P><BR></DIV>
<DIV class=postFoot>
<SCRIPT src=""></SCRIPT>
[<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)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'keyit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">收藏到我的网摘</A>]&nbsp;&nbsp; 
panyaxiong发表于 2007年04月25日 23:30:00 </DIV></DIV><LINK 
href="http://blog.csdn.net/panyaxiong/Services/Pingback.aspx" rel=pingback><!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Descriptionrdf:about="http://blog.csdn.net/panyaxiong/archive/2007/04/25/1585052.aspx"dc:identifier="http://blog.csdn.net/panyaxiong/archive/2007/04/25/1585052.aspx"dc:title="VC调用C#写的COM+组件"trackback:ping="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1585052" /></rdf:RDF>-->
<SCRIPT>function hide(){showComment();}</SCRIPT>
<BR><BR><BR><BR>
<DIV class=post id=csdn_zhaig_ad_yahoo></DIV>
<SCRIPT type=text/javascript>document.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");</SCRIPT>
<SPAN class=PreAndNext id=viewpost.ascx_PreviousAndNextEntriesDown>
<DIV align=center><A 
href="http://blog.csdn.net/panyaxiong/archive/2007/05/05/1596889.aspx">上一篇:&nbsp;用ASP.NET开发Web服务的五则技巧 
</A>&nbsp;|&nbsp;<A 
href="http://blog.csdn.net/panyaxiong/archive/2007/04/09/1558284.aspx">下一篇:&nbsp;IIS的配置小问题积累</A></DIV></SPAN><SPAN 
id=Anthem_Comments.ascx_ltlComments__><SPAN id=Comments.ascx_ltlComments><BR>
<DIV id=comments>
<H3>����</H3>没有评论。 </DIV></SPAN></SPAN>
<SCRIPT language=javascript>
ad_width=468;
ad_height=60;
adcss=2;
unionuser=19;
ad_type='j';
count=5; 
</SCRIPT>

<DIV>
<SCRIPT language=javascript 
src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/showads.js" 
type=text/javascript></SCRIPT>

<SCRIPT language=javascript 
src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/showgm.js" 
type=text/javascript></SCRIPT>
</DIV>
<DIV class=CommentForm id=commentform>
<H3>发表评论 </H3>
<DIV id=Anthem_PostComment.ascx_CommentUpdatePanel__>
<DIV id=PostComment.ascx_CommentUpdatePanel>
<TABLE class=CommentForm>
  <TBODY>
  <TR>
    <TD width=69 height=0></TD>
    <TD></TD></TR>
  <TR>
    <TD width=70>大名:</TD>
    <TD align=left><INPUT id=PostComment.ascx_tbName style="WIDTH: 300px" 
      disabled maxLength=32 size=40 name=PostComment.ascx:tbName> <SPAN 
      id=PostComment.ascx_RequiredFieldValidator2 
      style="DISPLAY: none; COLOR: red" initialvalue="" 
      evaluationfunction="RequiredFieldValidatorEvaluateIsValid" 
      display="Dynamic" errormessage="<br>请输入尊姓大名" 
      controltovalidate="PostComment.ascx_tbName"><BR>请输入尊姓大名</SPAN> </TD></TR>
  <TR>
    <TD width=70>网址:</TD>
    <TD align=left><INPUT id=PostComment.ascx_tbUrl style="WIDTH: 300px" 
      disabled maxLength=256 size=40 name=PostComment.ascx:tbUrl> </TD></TR>
  <TR>
    <TD colSpan=3>评论&nbsp; <SPAN id=PostComment.ascx_RequiredFieldValidator3 
      style="DISPLAY: none; COLOR: red" initialvalue="" 
      evaluationfunction="RequiredFieldValidatorEvaluateIsValid" 
      display="Dynamic" errormessage="<br>请输入评论" 
      controltovalidate="PostComment.ascx_tbComment"><BR>请输入评论</SPAN> <BR><TEXTAREA id=PostComment.ascx_tbComment style="WIDTH: 381px; HEIGHT: 193px" disabled name=PostComment.ascx:tbComment rows=10 cols=50></TEXTAREA> 
    </TD></TR>
  <TR>
    <TD colSpan=3><SPAN 
      id=Anthem_PostComment.ascx_btnSubmit__></SPAN>&nbsp;&nbsp;&nbsp; </TD></TR>
  <TR>
    <TD colSpan=3><SPAN id=PostComment.ascx_Message 
      style="COLOR: red">当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击<A 
      href="http://passport.csdn.net/member/UserLogin.aspx?from=http://blog.csdn.net/panyaxiong/archive/2007/04/25/1585052.aspx">登录</A></SPAN> 
    </TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<P id=footer>Powered by: <BR><A id=Footer1_Hyperlink2 
href="http://scottwater.com/blog" name=Hyperlink1><IMG 
src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/100x30_Logo.gif" border=0></A> <A 
id=Footer1_Hyperlink3 href="http://asp.net/" name=Hyperlink1><IMG 
src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/PoweredByAsp.Net.gif" border=0></A> 
<BR>Copyright © panyaxiong </P>
<SCRIPT src="VC调用C#写的COM+组件 - 小雄的家 - CSDNBlog.files/counter.js"></SCRIPT>

<SCRIPT type=text/javascript>
<!--
var Page_Validators =  new Array(document.getElementById("PostComment.ascx_RequiredFieldValidator2"), document.getElementById("PostComment.ascx_RequiredFieldValidator3"));
// -->
</SCRIPT>
<INPUT id=__EVENTVALIDATION type=hidden 
value=/wEWBAL+raDpAgKqtOi0AwLAsuLbDAKi687YCUWrxnz0m3jdiWVy2TbKBUr9QAYR 
name=__EVENTVALIDATION>
<SCRIPT type=text/javascript>
<!--
var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
// -->
</SCRIPT>
 </FORM>
<SCRIPT language=javascript type=text/javascript>
	<!--
	    try
        {
	        hide();
        }
        catch(e){}
	//-->
    </SCRIPT>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -