该回答引用ChatGPT-3.5,仅供参考,不保证完全正确
你的代码看起来大体上是正确的,但有一些问题可能导致你没有得到期望的效果。
首先,你在 oleobj.Add
方法的第二个参数中使用了反斜杠 \
,这是一个转义字符。为了在字符串中表示一个反斜杠,你需要使用两个反斜杠 \\
或者使用正斜杠 /
。所以你的路径应该改为:
oleobj.Add(covOptional, COleVariant("E:/SWFLIB_TestProject/SWF Sample Movies/Sample2.swf"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
另外,确保你的 SWF 文件路径是正确的,并且你的 Excel 文件支持嵌入 Flash 动画。有些版本的 Excel 可能不支持此功能。
最后,你还需要在代码中添加错误处理和释放对象的步骤,以确保资源的正确释放。这样可以防止内存泄漏和其他潜在问题。以下是一个完整示例:
#include <afxdisp.h>
// ...
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
_Application app;
_Workbooks books;
_Workbook book;
Sheets sheets;
_Worksheet sheet;
OLEObjects oleObjects;
OLEObject oleObject;
if (!app.CreateDispatch("Excel.Application"))
{
// 处理创建 Excel Application 失败的情况
}
books.AttachDispatch(app.GetWorkbooks());
LPDISPATCH lpDisp = books.Open(ml, covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional);
book.AttachDispatch(lpDisp);
sheets = book.GetSheets();
sheet = sheets.GetItem(COleVariant((short)1));
lpDisp = sheet.GetOLEObjects();
oleObjects.AttachDispatch(lpDisp);
oleObject = oleObjects.Add(covOptional, COleVariant("E:/SWFLIB_TestProject/SWF Sample Movies/Sample2.swf"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);
oleObject.SetEnabled(TRUE);
oleObject.SetVisible(TRUE);
// ...
// 释放对象
oleObject.ReleaseDispatch();
oleObjects.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.Close(FALSE, covOptional, covOptional);
book.ReleaseDispatch();
books.ReleaseDispatch();
app.Quit();
app.ReleaseDispatch();
请注意,这只是一个示例代码,并不能保证在所有环境中都能正常工作。你可能需要根据你的实际情况进行适当的修改和调整。