c++ builder 6 import C#(emgu) COM+ error

rutoka 2017-02-18 03:36:22
使用c++ builder 6 去用Import Type Library汇入C#编写的tlb档(命令提示字元注册DLL)

C#的部份有使用emgucv函式库去执行一些图片处理,C#则使用类库别编写COM组件,照着网上的教法去做基本处理运算

基本运算功能可正常在c++ builder 6 呼叫执行得到结果

但呼叫到emgu的部分就会有error的发生,想询问有没有前辈遇到类似问题,并且解决的

C# code

using System;
using System.Collections.Generic;
//using System.Linq;

using System.Drawing;
using Emgu.CV; //Emgu
using Emgu.CV.Structure;
using System.Runtime.InteropServices;


namespace DectFunct
{
[Guid("6B4ED5B9-5356-42E3-A6CA-1A242F91583A")]

public interface IComInterface

{
//[DllExport("Dect", CallingConvention = CallingConvention.StdCall)]

[DispId(1)]

int Dect(int x_allspace, int y_allspace, int x_space, int dead_sum, int pic_name);

[DispId(2)]

string COMINFO { get; }

[DispId(3)]

int add(int x_allspace, int y_allspace);

}

[Guid("1A8EB38C-E732-49B2-A897-B40FFD744E3D")]

public class Class1 : IComInterface
{
public int Dect(int x_allspace, int y_allspace, int x_space, int dead_sum, int pic_name)
{
int result = 0;
float hexagon_L = x_space;
Image<Bgr, Byte> image_Source;

//String openFile = pic_name + ".png";
string name = Convert.ToString(pic_name);
String openFile = name + ".bmp";
image_Source = new Image<Bgr, byte>(openFile);

if (image_Source != null)
result = 1;

return result;
}
public string COMINFO
{
get
{
return "com 測試";
}
}

public int add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
}



#pragma hdrstop
#include <iostream>
#include <vcl.h>
#include "Dectfunct_tlb.h"
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
HRESULT hr;

//初始化COM

CoInitialize ( NULL );


Dectfunct_tlb::IComInterfacePtr ptr;

hr = ptr.CreateInstance(__uuidof (Dectfunct_tlb::Class1));

if(hr == S_OK)
{
cout << ptr->add (32, 16)<<endl;

cout << ptr->Dect (32, 16, 3, 1, 1)<<endl;


BSTR outp = NULL;
ptr->get_COMINFO(&outp);
cout<<AnsiString(outp)<<endl;
}

CoUninitialize ();

system("pause");
return 0;
}


由于一些C#编写COM元件,到c++ builder 6 的方法我就略过了,网上很多教学我就不多提

先附上我自己电脑的执行正确结果


可是在执行过后,我目前使用的电脑WIN7-64位元能正常编译回传值,但若把dll、tlb档移至其他电脑使用,执行结果会出现


简单的运算是可以过的,但使用到emgu的函式部分不确定是不是有系统上的问题还是哪边有写错,这是我移植至其他电脑的执行结果


想询问有没有前辈有遇到这种error,并且有方法解决的,不确定是程式上的错误,还是软体系统上的问题

...全文
1059 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rutoka 2017-02-20
  • 打赏
  • 举报
回复
这部分的错误已经自行解决,在其他电脑系统需要安装第三类类库元件以及设定路径
一、主要内容:OpenCV能够实现强大丰富的图像处理,但是它缺少一个能够支持它运行的界面。Csharp经过多年的发展,得益于它的“所见及所得”能力,非常方便编写界面。这两者如果能够“双剑合璧”,将有效帮助实际工作产出。本课着重推荐GOCW采用“Csharp基于CLR直接调用Opencv编写的算法库”方法,能够将最新的OpenCV技术引入进来,同时保证生成程序的最小化。    为了进一步说明Csharp和OpenCV的结合使用,首先一个较为完整的基于winform实现答题卡识别的例子,相比较之前的实现,本次进一步贴近生产实际、内涵丰富,对算法也进行了进一步提炼。同时我们对WPF下对OpenCV函数的调用、OpenCV.js的调用进行相关教授。       二、课程结构1、 EmguCV、OpenCVSharp和GOCW之间进行比较(方便代码编写、能够融入最新的算法、速度有保障、方便调试找错、拒绝黑箱化);2、视频采集模块的构建,视频采集和图像处理之间的关系;3、视频采集专用的SDK和“陪练”系统的介绍;4、在视频增强类项目中和图像处理项目中,算法的选择;5、Csharp界面设计、图片的存储和其他构建设计;6、较为完整的答题卡识别例子,兼顾界面设计和算法分析;8、WPF基于GOCW也同样可以基于GOCW实现算法调用;webForm虽然也可以通过类似方法调用,但是OpenCV.JS的方法更现代高效。9、关于软件部署的相关要点和窍门。       三、知识要点:1、基本环境构建和程序框架;2、CLR基本原理和应用方法;3、接入、采集、模拟输入;4、图像处理,通过构建循环采集图片;5、增强和实时处理;6、基于投影等技术的答题卡识别算法;7、存储、转换;8、部署交付。        课程能够帮助你掌握Csharp调用Opencv的基本方法,获得相应框架代码和指导;从而进一步提升实现“基于图像处理”的解决方案能力。  

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧