我正在尝试将Excel工作簿或工作表传递给C dll . 我目前的方法是使C函数类似于以下内容:

int __stdcall myfunction(Excel::_WorksheetPtr dest_pSheet){
//some stuff to edit the worksheet ass:
 dest_pSheet->Cells->Item[1][1] = 1;
}

在我的def文件中,我有:

LIBRARY "MyDll"
EXPORTS
    test

在Excel中,我发出以下声明并致电:

Private Declare PtrSafe Sub test Lib "PathToDll/My.dll" _
         (ByRef destSheet As Worksheet) As Long

Sub CallTest()
    test ThisWorkbook.Worksheets("sheetname"))
End Sub

我使用的是Windows 7(64位),Excel和Visual Studio 2010 .

编辑:这种方法有时可行,但并非总是如此

edit2:更改(ByVal destSheet As Long)到(ByRef destSheet As Worksheet)

PD:看到收到的论据,我注意到参数不完全适合 . 导致读数并不总是正确的 .