这可能是一个非常愚蠢的问题 是否可以在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(TagList); SafeArrayDestroy(TagList); 端;
端;
答案 0 :(得分:3)
原则上,是的,您可以逐个指令逐步执行COM方法实现的代码。
然而,即使你很了解组装并且完全理解所有处理器指令的工作方式,以这种方式调试别人的代码也是一个很高的要求,除非它是一个非常非常简单的方法。
如果您不熟悉汇编程序,除非您准备好先学习数周的学习曲线,否则不要考虑它。
如果COM方法似乎没有按照你期望的方式工作,我将首先尝试使用非托管代码(例如C ++)测试方法,因为你的问题可能在COM Interop编组中而不是在COM方法本身。