gpt4 book ai didi

visual-studio - 是否可以在 VS2008 中调试 COM dll?

转载 作者:行者123 更新时间:2023-12-04 07:35:35 26 4
gpt4 key购买 nike

这可能是个很愚蠢的问题。
是否可以在我没有源代码的 VS2008 中调试 COM dll?

我想这样做的原因是我将一个数组传递给一个 COM 方法,我希望这个数组由该方法填充。
但是,数组未被填充。所以我想进入 COM 方法看看发生了什么。这可能吗?

下面是我使用的代码示例:

Array binaryArray = Array.CreateInstance(typeof(sbyte), 896);
bool success = photo.GetBinaryData(binaryArray);

GetBinaryData 方法的 IDL:

[id(0x000000c9)]
HRESULT GetBinaryData(
[in] SAFEARRAY(char) buffer,
[out, retval] VARIANT_BOOL* retval);

GetBinaryData 方法是我要进入的 COM 方法。

编辑:添加有效的 Delphi 测试脚本

procedure TComTestForm.TestUserBtnClick(Sender: TObject);
var
nCnt :integer;
User :IUser;
Persona :IUserPersona;
ArrayBounds :TSafeArrayBound;
ArrayData :Pointer;
TagList :PSafeArray;
nSize :integer;
begin
User := Session.GetUser;

ArrayBounds.lLbound := 0;
ArrayBounds.cElements := 0;

TagList := SafeArrayCreate( varInteger, 1, ArrayBounds );
User.GetTags( TagList );
if SafeArrayAccessData( TagList, ArrayData ) = S_OK then
begin
nSize := TagList.rgsabound[0].cElements;
OutLine( '----Available Tags, ' + IntToStr(nSize) + ' tags' );
for nCnt := 0 to nSize - 1 do
begin
OutLine( IntToStr( IntegerArray(ArrayData)[nCnt] ) );
end;

OutLine('----');

SafeArrayUnAccessData(标签列表); SafeArrayDestroy( TagList ); 结束;

结束;

最佳答案

原则上是的,您可以逐个指令单步执行COM 方法实现的代码。

但是,即使您非常了解汇编并确切了解所有处理器指令的工作原理,以这种方式调试其他人的代码也是一项艰巨的任务,除非它是一种非常非常简单的方法。

如果您是汇编程序的新手,甚至不要考虑它,除非您准备好先进行数周的学习曲线。

如果 COM 方法似乎没有按照其文档所预期的方式工作,我将首先尝试使用非托管代码(例如 C++)测试该方法,因为您的问题可能出在 COM Interop 编码中而不是在 COM 方法本身中。

关于visual-studio - 是否可以在 VS2008 中调试 COM dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com