| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 494 人关注过本帖
标题:谁会C#制作com组件?
只看楼主 加入收藏
yb20327363
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-11-26
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
谁会C#制作com组件?
我想用C#做Com组件给其它的语言使用!但先前按照网上的文章做出来一个加减法可以返回int变量 后来我就自己做了一个其中加入了
[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
这些东西后还是按网上的说法做出来然后调用可以找到接口但每次返回IntPtr时都是0 搞不懂了!后来我直接在return后面写12345居然在别的软件上返回得到的也是0 我晕了!!!怎么搞的??怎么回没有返回值了呢???
搜索更多相关主题的帖子: 网上 private return 文章 
2012-12-01 21:11
yb20327363
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-11-26
收藏
得分:0 
回复 楼主 yb20327363
还有就是做Com组件必需要那个事件接口吗????
2012-12-01 21:14
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:10 
你的其它的语言是什么语言啊?如果也是.NET语言,可以不用接口,非.NET语言则需要,没有问题的,至于返回0,你仔细看一下你要找的窗口是否可以找到,没找到就返回0的。

为提高中华编程水平而奋斗
2012-12-02 13:04
yb20327363
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-11-26
收藏
得分:0 
回复 3楼 mmxo
是非.net的语言! 主要大神你有这方面的例子给参考下吗?
2012-12-02 18:38
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
收藏
得分:0 
C++调用C#编写的COM
1、建C#类库CSharpCOMComponent,接口IMyClass,类MyClass,方法Find调用Win32API查找名为“计算器”的窗体。
程序代码:
using System;
using System.Runtime.InteropServices;
namespace CSharpCOMComponent
{
    [ComVisible(true)]
    [Guid("6BF1BC54-4006-4F0D-B6DC-B739F9A3236E")]
    public interface IMyClass
    {
        [DispId(1)]
        int Find();
    }
    [ComVisible(true)]
    [Guid("32F230A4-3822-419A-A7A2-ED9054B02A74")]
    [ClassInterface(ClassInterfaceType.None)]
    public class MyClass : IMyClass
    {
        [DllImport("user32.dll", EntryPoint = "FindWindow")]
        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
      
        public int Find()
        {
            return (int)FindWindow(null, "计算器");
        }
    }
}

2、为COM修改配置,生成密钥文件等,这些你应该懂了吧?
3、编译COM,将得到的文件放到相应目录下;
4、在C++里面调用,如下:
程序代码:
#include "stdafx.h"
#include <iostream>
#import "C:\CSharpCOMComponent.tlb" named_guids raw_interfaces_only
int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    CSharpCOMComponent::IMyClassPtr classPtr;
    classPtr.CreateInstance(CSharpCOMComponent::CLSID_MyClass);
    long calcHwnd;
    long * lPtr = &calcHwnd;
    classPtr->Find(lPtr);
    std::cout<<calcHwnd;
    getchar();
}

得到结果:7607834,完全没有问题!



为提高中华编程水平而奋斗
2012-12-02 21:31
yb20327363
Rank: 1
等 级:新手上路
帖 子:20
专家分:3
注 册:2012-11-26
收藏
得分:0 
回复 5楼 mmxo
谢谢!~~ 终于弄出来了!呵呵
2012-12-02 23:32
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
C#不能直接调用C#编写的COM,一定要引用程序集吗?
不能像这样吗?
[Dllimport("CSharpCOMComponent.dll")]
static extern int Find();

//调用
Find();

//异常信息是无法找到入口
2013-03-18 13:26
shangsharon
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
威 望:7
帖 子:221
专家分:1261
注 册:2012-3-25
收藏
得分:0 
回复 5楼 mmxo
见楼上
2013-03-18 22:32
快速回复:谁会C#制作com组件?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024398 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved