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

标签 visual-studio debugging com com-interop

这可能是个很愚蠢的问题。
是否可以在我没有源代码的 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/

相关文章:

java - 调试多进程 java 应用程序

css - 如何在 IE 中调试(使页面看起来像在 Firefox 中)CSS?

c# - 挂起互操作 COM 对象的问题

c - 如何将两个windows vc静态库合并为一个

c# - 如何进行简单的 dataGridView 搜索/过滤?

C++ Utf-8转换使用atlconv.h/W2A和中文文本

delphi - 调用 Delphi DLL 会使 VB6 exe 崩溃,错误代码为 "Run-time error ' -2147418113 (8000ffff )' Method ' ~' of object ' ~' failed",但仅在某些机器上!

c# - 调试程序集加载问题

apache-flex - Flash Builder 4 - Flash Player 无法连接到调试器

c++ - 调试 InProc COM Dll