Запись CD / DVD с использованием IMAPI2.dll - PullRequest
1 голос
/ 04 апреля 2011

Я пытаюсь добавить средство для записи CD / DVD в мое приложение, используя IMAPI2.dll.Я использую Microsoft Visual FoxPro 9 SP 2 для разработки .Когда я вызываю метод Write (), который является членом класса IMAPI2.MsftDiscFormat2Data (последняя строка примера кода), Visual FoxPro выдает следующее сообщение об ошибке.Сообщение об ошибке: "Код ошибки OLE 0x80004002: такой интерфейс не поддерживается."

ОС: Windows 7

Пожалуйста, помогите.

**--Creating MsftDiscMaster2 object to connect to optical drives.
loDiscMaster = CREATEOBJECT("IMAPI2.MsftDiscMaster2")

**--Creating MsftDiscRecorder2 object for the specified burning device.
loRecorder = CREATEOBJECT("IMAPI2.MsftDiscRecorder2")
lcUniqueId = loDiscMaster.ITEM(0)
loRecorder.InitializeDiscRecorder(lcUniqueId)

**--Create an image stream for the specified directory.
loFileSystem = CREATEOBJECT("IMAPI2FS.MsftFileSystemImage")
loRootDir = loFileSystem.Root

**--Create the new disc format and set the recorder.
loDataWriter = CREATEOBJECT("IMAPI2.MsftDiscFormat2Data")
loDataWriter.Recorder = loRecorder
loDataWriter.ClientName = "IMAPIv2 TEST"

loFileSystem.ChooseImageDefaults(loRecorder)

**--Add the directory and its contents to the file system.
loRootDir.AddTree("F:\VSS",.F.)

**--Create an image from the file system
loResultImage = loFileSystem.CreateResultImage()
loStream = loResultImage.ImageStream

**--Write stream to disc using the specified recorder.
loDataWriter.Write(loStream)

1 Ответ

1 голос
/ 28 июля 2011

Боюсь, вам не повезло.FoxPro взаимодействует с COM-объектами на достаточно высоком уровне.На самом деле, он работает во многом так же, как VBScript взаимодействует с COM.Обычно, если ваш код работает в VBScript, он также будет работать в FoxPro.

На самом деле это распространенная проблема с некоторыми библиотеками ActiveX / COM.В то время как все объекты, реализованные в imapi2.dll и imapi2fs.dll, используют IDispatch - наивысший уровень и наиболее совместимая форма интерфейса COM - некоторые параметры метода, возвращаемые методы и свойства этих объектов не IDispatch.

В частности, свойство ImageStream возвращает нечто, называемое IStream , которое наследуется от IUnknown вместо IDispatch.Из-за этого свойство ImageStream возвращает то, с чем FoxPro не знает, как иметь дело.FoxPro знает, что это COM-интерфейс, но не знает, как найти или вызвать методы этого объекта.

...