我完全不懂VB,所以还请大家原谅!
VC中代码如下:
BOOL CST_CurveCtrl::QueryLegend(long Address, OLE_COLOR FAR* pColor)
这个函数取出一个OLE_COLOR FAR类型数据放入pColor这个指针所指向的内存中,至于我为什么要这样,因为如果这样的话:
OLE_COLOR CST_CurveCtrl::QueryLegend(long Address),将无法表达函数执行失败时的情况。我老是担心我这个方法不能被VB调用,或者很难被VB调用,于是我增加了下面的方法:
VARIANT CST_CurveCtrl::VBQueryLegend(long Address)
这个方法如果函数执行失败,则返回的VARIANT是空的,如果成功,则返回的VARIANT就包涵需要的OLE_COLOR(其实就是long)。我想问的问题是,到底需不需要提供VBQueryLegend函数?或者说,我提供的VBQueryLegend函数,有没有为VB使用者提供一些方便?
VC中代码如下:
BOOL CST_CurveCtrl::QueryLegend(long Address, OLE_COLOR FAR* pColor)
这个函数取出一个OLE_COLOR FAR类型数据放入pColor这个指针所指向的内存中,至于我为什么要这样,因为如果这样的话:
OLE_COLOR CST_CurveCtrl::QueryLegend(long Address),将无法表达函数执行失败时的情况。我老是担心我这个方法不能被VB调用,或者很难被VB调用,于是我增加了下面的方法:
VARIANT CST_CurveCtrl::VBQueryLegend(long Address)
这个方法如果函数执行失败,则返回的VARIANT是空的,如果成功,则返回的VARIANT就包涵需要的OLE_COLOR(其实就是long)。我想问的问题是,到底需不需要提供VBQueryLegend函数?或者说,我提供的VBQueryLegend函数,有没有为VB使用者提供一些方便?
解决方案 »
- 100分磕头跪求 access 查询问题。
- 求VB6下的可折叠代码的ADD-INS[解决就送500分]
- 使用iNet控件,如何获得文件的创建时间等文件属性信息?
- 当 toolbar 一个按扭的样式为 5-tbrDropDown 时 怎么写它采单的click事件?
- 真正的高手需要真正的问题^_^
- Intelement 在 VB 非技术类论坛发表散分贴子(3)
- 我想知道怎樣新增 DataGrid 的行和列(使用它的什么屬性),謝謝﹗
- 报表用DataEnviroment+DataReport中出现的一个小问题???
- 菜问题...
- 你要对你的言行负责
- VB中嵌入我word,并把结果写入数据库中
- VB ado 操作数据库问题 急
就算我做成COM,接口仍然是这个样子:
BOOL CST_CurveCtrl::QueryLegend(long Address, OLE_COLOR FAR* pColor)
有什么区别吗?
我还是想问VB调用起来方便吗?
另外,我还希望我的控件能被脚本语言,比如javascript调用,就算VB能调用
BOOL CST_CurveCtrl::QueryLegend(long Address, OLE_COLOR FAR* pColor)
这样的函数,那么javascript能吗?
请帮我写几句程序,我想知道VB和javascript如何调用我这个函数:BOOL QueryLegend(long Address, OLE_COLOR FAR* pColor) 另外我还有一个特殊要求,就是pColor可以为0,也就是要说,要有两种方法来调用这个接口,比如在VC中:
方法一:
if (QueryLegend(100, 0))
AfxMessaageBox("ok");方法二:
COLORREF Color;
if (QueryLegend(100, &Color))
AfxMessaageBox("ok");谢谢。
short PrintCurve(long Address, double FAR* pBTime, double FAR* pETime);
打印一段时间内的数据,如果pBTime为0(空指针),则从最小的开始打印,否则从*pBTime开始打印,pETime也一样处理。
所以我必须要要求,指针必须要能够取到空值,不知道在VB 和javascript里面怎么实现,如何实现。
对vb来说,最安全的方法是定义为按值传递的长整型, 即QueryLegend(long Address, long pColor)。只是调用时需要用VarPtr取得变量地址。Dim lColor As Long
CST_CurveCtrl.QueryLegend(100, VarPtr(lColor))
但是,在javascript中,貌似没有取变量地址的操作符,所以采取上面这种方法似乎也是不行的
除此之外,我觉得还有种方法是将第二个参数设置为可选参数,QueryLegend(long Address, [optional] long pColor)
用判断第二个参数是否传入的方法来替代空值
而且,在MFC中,如何才能判断参数有没有传入呢?我搞这么久的VC,还没听说过。只听说过C语言的默认参数,可是在调用的时候,虽然少写了参数,实际上还是每个参数都传入了的。
BOOL QueryLegend(long Address, OLE_COLOR FAR* pColor)
方法一:
if (QueryLegend(100, 0))
AfxMessaageBox("ok"); 方法二:
COLORREF Color;
if (QueryLegend(100, &Color))
AfxMessaageBox("ok"); 方法一现在是错误的了,不允许了。那么在javascript里面或者vbscript里面,如果调用QueryLegend函数呢?能否举个例子?
if (varColor.vt==VT_ERROR && varColor.scode==DISP_E_PARAMNOTFOUND)
...parameter is missing;
网页上使用OBJECT标签将你的控件插入页面
<OBJECT classid="clsid:你控件的GUID" id="CST_CurveCtrl">
<PARAM Name="属性1" Value="xxxx">
...
</OBJECT>
然后
<script language="vbscript">
b = CST_CurveCtrl.QueryLegend(100, 129312391)
</script>
Dim b,myColor
b = CST_CurveCtrl.QueryLegend(100, myColor)
</script>
Dim b,myColor
b = CST_CurveCtrl.QueryLegend(100, myColor)
</script>这么简单就能调用了?
比VB调用起来还方便?
能不能给我写一个完整的html文件,我想亲自试试,我除了C之外什么也不懂,不好意思。
要求如下(VC的,请改成脚本的):
<script language="vbscript">
Dim b,myColor
b = CST_CurveCtrl.QueryLegend(100, myColor)
if (b)
{
CString str;
str.Format("%X", myColor);
AfxMessageBox(str);
}
</script>
<body>
<OBJECT classid="clsid:你控件的GUID" id="CST_CurveCtrl">
</OBJECT> <script language="vbscript">
Dim b,myColor
b = CST_CurveCtrl.QueryLegend(100, myColor) if b<>0 then
dim str
str=hex(myColor)
msgbox strend if
</script> </body>
</html>