etet-1234 发表于 2008-3-3 15:18

COM方法连接VC时是否不能调用神经网络函数

我用的是MATLAB6.5+VC6.0
我用COM连接VC时 是不是不能调用神经网络函数  我在网上看了看 说是不能调用newff  我就改用trainbp 训练 也不行  应该怎么弄 请大家帮忙  是用6.5版本低吗  用别方法的接口 能调用吗

[ 本帖最后由 eight 于 2008-3-3 17:13 编辑 ]

dundun628 发表于 2008-3-3 23:09

理论上应该是可以的

我当初用的是C#.net+matlab6.5,trainbp函数训练,是完全没有问题的。

有点不明白你的问题在于哪里,是com组件编译不了?还是在VC中不能调用?

如果是编译不能通过,建议你修改一下编译器,matlab自带的编译器和VC6编译器都试试,应该有一个能够通过。另外就是现在matlab中,把代码全部写入m文件,执行,确认无误后再编译。

如果是在VC中调用不成功,那就要好好研究一下库的调用。当时在C#中做的还算简单,有直接添加的选项。这个要看你C的功底了,一句两句帮不了你啊

etet-1234 发表于 2008-3-4 11:59

哦 谢谢拉 问一下 你那时也是 用的COM的吗 我做比较简单的 plot 这种到是 能调用 但是换成newff就不行 我又改为 trainbp还是不行  用COM编译时 怎么看是不是MATLAB是不是 通过了呀  不是很明白 我估计和VC应该没什么太大关系

eight 发表于 2008-3-4 12:45

原帖由 etet-1234 于 2008-3-4 11:59 发表 http://www.chinavib.com/forum/images/common/back.gif
哦 谢谢拉 问一下 你那时也是 用的COM的吗 我做比较简单的 plot 这种到是 能调用 但是换成newff就不行 我又改为 trainbp还是不行  用COM编译时 怎么看是不是MATLAB是不是 通过了呀  不是很明白 我 ... 你是中文没有学好还是懒惰?标点不打、段落又不分,一堆文字放上来不觉得很难看吗

[ 本帖最后由 eight 于 2008-3-4 12:46 编辑 ]

dundun628 发表于 2008-3-4 14:24

是用com做的。

难道你是只调用了一个trainbp函数?你可以这样试试,写一段m文件,里面把需要训练的数据都输入好,然后训练,给出结果。在matlab中直接运行,如成功,则说明m文件这方面没有问题。

然后,将你这段m文件,改成一个函数,你可以先不传参数,编译成com组件。然后用vc调用,看是否成功。如成功,再传参数。

ps:com接口有很多细微的地方,比如,dll文件编译好后要注册,VC的数组和matlab的数组起始值不同(一个是0,一个是1)等等,都需要你自己注意。另外,多用debug工具,看看问题到底出在哪里

etet-1234 发表于 2008-3-4 19:52

谢谢楼上的.我做的大概是按邓科12的例子做的.这是MATLAB函数
function t1()
a=1:10;
plot(a,sin(a));
这是VC的
CoInitialize(NULL);
It1 *pclass;
    HRESULT hr=CoCreateInstance(CLSID_t1,NULL, CLSCTX_ALL, IID_It1, (void **)&pclass);
hr=pclass->t1();
pclass->Release();
    CoUninitialize();
可以调用.
但是我要调用
function t5()
p=[-3.0 2.0];
t=;
=initff(p,t,'logsig');
disp_freq=1;
max_epoch=100;
err_goal=0.001;
lr=2;
tp=;
=trainbp(w,b,'logsig',p,t,tp);
就不行拉 我不太明白 DLL要注册 我看了点 例子都没注册呀

dundun628 发表于 2008-3-5 14:01

TRAINBP: Network error did not reach the error goal.
Further training may be necessary, or try different
initial weights and biases.

以上是我在matlab里运行的结果。

建议先检查一下,确定你trainbp函数是否用对了。

如果是vc调用出错,应从matlab代码方面考虑,还有com组件编译器也可以换着试试。

如果是调用不了,那多半是VC方面的问题,尝试注册之类的方发吧。

etet-1234 发表于 2008-3-5 22:19

function t5()
p=[-3.0 2.0];
t=;
=initff(p,t,'logsig');
disp_freq=1;
max_epoch=100;
err_goal=0.001;
lr=2;
tp=;
=trainbp(w,b,'logsig',p,t,tp);
这段代码没有错误呀. 我运行的结果是
TRAINBP: 30/100 epochs, SSE = 0.000828597.而且还有误差的图.
还有com组件编译器也可以换着试试   我不太明白. 我就会用MATLAB Builder 使用COM
我原来一直用6.5 今天改为7.0才发现 他们COM还不一样.我现在老迷糊了. 呵呵

dundun628 发表于 2008-3-6 10:25

我当时做的时候,也用的6.5,满顺利的、matlab里自带了com编译器,如果没有记错的话有两个吧,一个C的,一个C++的,你安装VC后可能还有一个,可以换着试试。我当时就遇到换编译器就调用错误的问题。

etet-1234 发表于 2008-3-6 18:58

是有一个C的,一个C++的.但是只能用C,用C++的话COM编译就会出现错误.弄不明白. 不行我也C#得了.那时你用C#时 可以用newff()吗
页: [1]
查看完整版本: COM方法连接VC时是否不能调用神经网络函数