Ответ 1
Прежде чем вы даже коснитесь бесплатной регистрации регистрации, убедитесь, что ваше приложение работает, когда DLL зарегистрирована. Как только вы довольны этим. Это время, чтобы попытаться заставить его работать бесплатно. Первый шаг - отменить регистрацию вашей DLL. Если вы попытаетесь запустить свою программу сейчас, вы должны получить ClassId не найден.
Первый шаг - создать файл манифеста для вашего приложения. Файл манифеста представляет собой XML файл, который, помимо прочего, может устанавливать зависимости для вашего приложения. Вы можете не знать об этом, но так как в Delphi 2007, если у вас есть темы, ваше приложение имеет манифест. Вот он из Delphi 2010:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="CodeGear RAD Studio"
version="14.0.3615.26342"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Теперь я не уверен, что вы можете добавить к этому, и у вас может быть только один файл манифеста для каждого приложения, я просто заменю его полностью. Поскольку я хочу, чтобы темы включались, я начинаю с этого файла и добавляю свою зависимость. В вашем случае вам нужно добавить зависимость для skype4com.dll. Вот что мне нужно добавить:
<assemblyIdentity
name="Skype4COM.X"
version="1.0.36.0"
type="win32"
processorArchitecture="x86">
</assemblyIdentity>
Примечание. Я фактически добавляю зависимость от сборки Skye4COM.X, а не самой dll. Не путайте 2, хотя dll может быть сборкой, сборка не обязательно 1 dll. Это станет ясным, когда мы установим манифест сборки /
Теперь ваш файл манифеста будет выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="CodeGear RAD Studio"
version="14.0.3615.26342"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
name="Skype4COM.X"
version="1.0.36.0"
type="win32"
processorArchitecture="x86">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Сохраните этот файл с тем же именем, что и ваш исполняемый файл, но с суффиксом .manifest. Например SkypeClient.exe.manifest
Следующий шаг - включить этот манифест в ваше приложение. Вам необходимо создать файл ресурсов (файл rc) со следующим текстом:
#define RT_MANIFEST 24
#define APP_MANIFEST 1
APP_MANIFEST RT_MANIFEST SkypeClient.exe.manifest
Добавьте этот файл в свое приложение и создайте его. Если у вас все еще есть темы, вы получите предупреждение о дублировании ресурсов, просто удалите {$ R *.res} из своего файла dpr. Вы также должны увидеть это в файле проекта:
{$R 'SkypeClient.manifest.res' 'SkypeClient.manifest.rc'}
Если вы попытаетесь запустить приложение сейчас, вы получите следующее сообщение об ошибке:
Невозможно создать процесс: приложение не удалось запустить потому что его бок о бок конфигурации это неверно. См. журнал событий приложения или использовать средство командной строки sxstrace.exe для более подробно.
Теперь нам нужно добавить манифест для сборки (Skype4COM.X). Создайте файл с именем Skype4COM.X.manifest. Нам нужно описать сборку в файле манифеста:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Skype4COM.X"
version="1.0.36.0"
type="win32"
processorArchitecture="x86">
</assemblyIdentity>
<file name="Skype4COM.dll">
<typelib
tlbid="{03282B5D-B38F-469D-849A-09B0A7F4881B}"
version="1.0"
helpdir=""
flags="hasdiskimage"/>
</file>
</assembly>
Теперь поместите приложение DLL и манифест сборки в ту же папку и запустите!
Если вы получите больше ошибок, вам нужно будет использовать SxSTrace для отладки. Это доступно в Vista и далее. Сначала запустите трассировку:
SxSTrace trace -logfile:sxsTrace.etl
запустите свою программу, а затем нажмите enter на трассе, чтобы закончить ее. Теперь проанализируйте трассировку:
SxSTrace parse -logfile:SxSTrace.etl -outfile:SxStrace.txt
У вас должен быть полный журнал всего процесса в SxSTrace.txt