type
TProduct = class(TAutoObject, IProduct)
public
function GetProductInfo(vFieldName: enmProductInfoField): WideString; stdcall;
procedure LetProductInfo(vFieldName: enmProductInfoField;
vNewValue: OleVariant); safecall;
{ Protected declarations } end;
TProductItem=class(TCollectionItem)
public
InnerProduct:TProduct;
end;
......
type TProductsCol=class(TCollection)
public
//procedure Added(var Item: TCollectionItem); override;deprecated;
end; TProducts = class(TAutoObject, IProducts)
protected
function Count: Integer; stdcall;
function Item(Index: OleVariant): IProduct; safecall;
procedure AddParameter(vFieldName: enmProductField;
const vNewStr: WideString; And_Or: enmAnd_Or); safecall;
procedure ExecuteQuery; safecall;
{ Protected declarations }
private
ProductsCol:TProductsCol;
sPrm:string;
public
procedure Initialize;override;
end;
以上是COM接口的实现,其中有一个方法:Item(Index):IProduct; 我是这样作的: function TProducts.Item(Index: OleVariant): IProduct; begin
Result:=TProductItem(ProductsCol.FindItemID(intege(index))).InnerProduct ;
end;编译通过了,可在其他开发环境(如VB)中使用这个方法时出现"内存不能为写"的错误.
为什么呢?
应该怎样从一个COM方法中返回一个COM接口?
TProduct = class(TAutoObject, IProduct)
public
function GetProductInfo(vFieldName: enmProductInfoField): WideString; stdcall;
procedure LetProductInfo(vFieldName: enmProductInfoField;
vNewValue: OleVariant); safecall;
{ Protected declarations } end;
TProductItem=class(TCollectionItem)
public
InnerProduct:TProduct;
end;
......
type TProductsCol=class(TCollection)
public
//procedure Added(var Item: TCollectionItem); override;deprecated;
end; TProducts = class(TAutoObject, IProducts)
protected
function Count: Integer; stdcall;
function Item(Index: OleVariant): IProduct; safecall;
procedure AddParameter(vFieldName: enmProductField;
const vNewStr: WideString; And_Or: enmAnd_Or); safecall;
procedure ExecuteQuery; safecall;
{ Protected declarations }
private
ProductsCol:TProductsCol;
sPrm:string;
public
procedure Initialize;override;
end;
以上是COM接口的实现,其中有一个方法:Item(Index):IProduct; 我是这样作的: function TProducts.Item(Index: OleVariant): IProduct; begin
Result:=TProductItem(ProductsCol.FindItemID(intege(index))).InnerProduct ;
end;编译通过了,可在其他开发环境(如VB)中使用这个方法时出现"内存不能为写"的错误.
为什么呢?
应该怎样从一个COM方法中返回一个COM接口?
其实这个问题很实用的.各位是不明白什么意思吗?
分不够可以再加的.