- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我引用的文档在这里,相当简短,切中要点: http://livedocs.adobe.com/en_US/Dreamweaver/9.0_API/help.html?content=dwr_sourcecontrol_so_01.html
我遇到的问题是我不确定如何编译实际的 DLL。 adobe extension 论坛上的最后一个回复是 3 个月前的,我不知道该问哪里。
让我感到困惑的编程部分是我必须使用 C++ 构建 DLL,但大多数教程都是基于构建目标应用程序包含的头文件。 (我是 DLL 编程的新手。)Dreamweaver 只需要一个 DLL,它已经知道要调用什么。我对如何将这些信息单独放在 DLL 文件中感到困惑,尽管基于我阅读的教程,因为应用程序似乎也需要头文件或 lib 文件。
我第一次尝试使用 VS2008 并为我的项目类型选择了 win32 DLL,然后在它生成的导出函数文件中添加了所需的函数。我的第一个如下:
extern "C" __declspec(dllexport) bool SCS_Connect(void **connectionData, const char siteName[64])
{
return true;
}
任何人都可以帮助阐明这是如何工作的吗?
编辑:重读文档我注意到它说:
Dreamweaver determines which features the library supports by calling GetProcAddress() for each API function. If an address does not exist, Dreamweaver assumes the library does not support the API. If the address exists, Dreamweaver uses the library's version of the function to support the functionality.
虽然我仍然不确定这对我编译的 DLL 意味着什么。
编辑 2:Dependency Walker 返回:
LoadLibraryW("c:\program files\adobe\adobe dreamweaver cs3\Configuration\SourceControl\mercFlow.dll") returned 0x05110000.
GetProcAddress(0x05110000 [MERCFLOW.DLL], "MM_InitWrapper") called from "DREAMWEAVER.EXE" at address 0x00D73D4B and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x05110000 [MERCFLOW.DLL], "SCS_GetAgentInfo") called from "DREAMWEAVER.EXE" at address 0x00D73D66 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x05110000 [MERCFLOW.DLL], "SCS_GetNumNewFeatures") called from "DREAMWEAVER.EXE" at address 0x00D73D72 and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x05110000 [MERCFLOW.DLL], "SCS_GetNewFeatures") called from "DREAMWEAVER.EXE" at address 0x00D73D7E and returned NULL. Error: The specified procedure could not be found (127).
GetProcAddress(0x05110000 [MERCFLOW.DLL], "SCS_Connect") called from "DREAMWEAVER.EXE" at address 0x00D73E2B and returned NULL. Error: The specified procedure could not be found (127).
其中一些在我的 DLL 中定义(根据文档,有些是可选的),但未找到。这是否意味着我的函数没有被导出?
这是我的 DLL 源代码:
dllheader.h
#ifndef DLLHEADER_H_INCLUDED
#define DLLHEADER_H_INCLUDED
#ifdef DLL_EXPORT
# define EXPORT extern "C" __declspec (dllexport)
#else
# define EXPORT
#endif
DLL_EXPORT struct itemInfo;
DLL_EXPORT bool SCS_GetAgentInfo(char name[32],char version[32], char description[256], const char * dwAppVersion);
DLL_EXPORT bool SCS_Connect(void **connectionData, const char siteName[64]);
DLL_EXPORT bool SCS_Disconnect(void *connectionData);
DLL_EXPORT bool SCS_IsConnected(void *connectionData);
DLL_EXPORT int SCS_GetRootFolder_Length(void *connectionData);
DLL_EXPORT int SCS_GetFolderListLength(void *connectionData, const char *remotePath);
DLL_EXPORT bool SCS_GetFolderList(void *connectionData, const char *remotePath, itemInfo itemList[ ], const int numItems);
DLL_EXPORT bool SCS_Get(void *connectionData, const char *remotePathList[], const char *localPathList[], const int numItems);
DLL_EXPORT bool SCS_Put(void *connectionData, const char *localPathList[], const char *remotePathList[], const int numItems);
DLL_EXPORT bool SCS_NewFolder(void *connectionData,const char *remotePath);
DLL_EXPORT bool SCS_Delete(void *connectionData, const char *remotePathList[],const int numItems);
DLL_EXPORT bool SCS_Rename(void *connectionData, const char * oldRemotePath, const char*newRemotePath);
DLL_EXPORT bool SCS_ItemExists(void *connectionData,const char *remotePath);
#endif
main.cpp
#define DLL_EXPORT
#include "dllheader.h"
#include <iostream>
char* const gName="MercFlow";
char* const gVersion="1.0";
char* const gDescription="Native Mercurial Support for Dreamweaver.";
DLL_EXPORT struct itemInfo
{
bool isFolder;
int month;
int day;
int year;
int hour;
int minutes;
int seconds;
char type[256];
int size;
};
// Description: This function asks the DLL to return its name and description, which appear in the Edit Sites dialog box. The name appears in the Server Access pop-up menu (for example, sourcesafe, webdav, perforce) and the description below the pop-up menu.
// name: The name argument is the name of the source control system. The name appears in the combo box for selecting a source control system on the Source Control tab in the Edit Sites dialog box. The name can be a maximum of 32 characters.
DLL_EXPORT bool SCS_GetAgentInfo(char name[32],char version[32], char description[256], const char * dwAppVersion)
{
name=gName;
version=gVersion;
description=gDescription;
return true;
}
//Description: This function connects the user to the source control system. If the DLL does not have log-in information, the DLL must display a dialog box to prompt the user for the information and must store the data for later use.
DLL_EXPORT bool SCS_Connect(void **connectionData, const char siteName[64])
{
return true;
}
DLL_EXPORT bool SCS_Disconnect(void *connectionData)
{
return true;
}
DLL_EXPORT bool SCS_IsConnected(void *connectionData)
{
return true;
}
DLL_EXPORT int SCS_GetRootFolder_Length(void *connectionData)
{
return 0;
}
DLL_EXPORT bool SCS_GetRootFolder(void *connectionData, char remotePath[],const int folderLen)
{
return true;
}
DLL_EXPORT int SCS_GetFolderListLength(void *connectionData, const char *remotePath)
{
return 0;
}
DLL_EXPORT bool SCS_GetFolderList(void *connectionData, const char *remotePath, itemInfo itemList[ ], const int numItems)
{
return true;
}
DLL_EXPORT bool SCS_Get(void *connectionData, const char *remotePathList[], const char *localPathList[], const int numItems)
{
return true;
}
DLL_EXPORT bool SCS_Put(void *connectionData, const char *localPathList[], const char *remotePathList[], const int numItems)
{
return true;
}
DLL_EXPORT bool SCS_NewFolder(void *connectionData,const char *remotePath)
{
return true;
}
DLL_EXPORT bool SCS_Delete(void *connectionData, const char *remotePathList[],const int numItems)
{
return true;
}
DLL_EXPORT bool SCS_Rename(void *connectionData, const char * oldRemotePath, const char*newRemotePath)
{
return true;
}
DLL_EXPORT bool SCS_ItemExists(void *connectionData,const char *remotePath)
{
return true;
}
最佳答案
根据文档,在 Dreamwaver 接受您的 DLL 之前,您可能需要添加所有必需的函数。您可以使用 Dependency Walker的配置文件模式,看看当 DW 加载你的 DLL 时会发生什么。还要验证您的 DLL 是否确实导出了所有必需的符号。
编辑:在 Dependency Walker 的模块树或模块列表中选择您的 DLL,然后查看右侧的导出列表(它在第一列标题中显示“E”)并确保所有必需的函数都在那里。如果 GetProcessAddress 在所需函数之一上失败,您需要添加该函数。
关于c++ - 构建与 Dreamweaver 兼容的 C DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3302876/
我有一个为 Firefox 3.6 编写的附加组件,现在我正在将其升级到 Firefox 4.0,同时尝试使其与 3.6 兼容。有没有人有尝试这样做的经验,或者关于如何在代码变得太意大利面条式的情况下
我已经安装了 Cassandra 2.0.1 并想在我的应用程序中使用 Astyanax Java API。我在维基上看到了 Cassandra 兼容性表,上面写着 Astyanax 使用 Netfl
是否可以使纯粹在 VBScript(无 COM 对象)中实现的自定义容器类与 For Each 语句一起使用?如果是这样,我必须公开哪些方法? 最佳答案 简而言之,没有 为什么?创建一个可枚举的集合类
我这里的代码很少 int b=3; b=b >> 1; System.out.println(b); 它工作得很好,但是当我将变量 b 更改为 byte、short、float、double 时它包含
我们有一个 Java 客户端,它使用 corba 调用多个第三方系统。这些是实现同一组接口(interface)的不同系统。我们获得了使用这些接口(interface)的库(jar 文件)。例如,这些
我知道从技术上讲 HTML5 是一个“实时规范”,但我想知道它是否符合在类名中添加尾随空格的规定。我没有在规范中看到任何对这种情况的引用,但我的一个队友说它是无效的。也许我错过了什么? 修剪这些空间会
我在 Linux x86-64 上用 C 语言编程。我正在使用一个库,它通过原始 clone 创建多个线程系统调用而不是使用 pthread_create .这些线程运行库内部的低级代码。 我想钩住这
我希望用汇编程序编写一个可启动程序,能够发送和接收网络数据包。我不想使用任何库,我想自己创建它(并在这样做的同时学习)。不幸的是,我无法找到有关最低级别的网卡通信(发送原始套接字)的任何信息。我相信有
是否有除 fixed scoping 之外没有任何更改的 CoffeeScript 分支,以便它在很大程度上与 CoffeeScript 兼容(如果代码没有外部变量赋值则完全兼容)?我会考虑使用可接受
这个问题已经有答案了: Why is BiConsumer allowed to be assigned with a function that only accepts a single para
我的 Java 应用程序需要一个高性能主内存数据库 1] 请建议数据库 -符合 JDBC -独立(即平面文件) -支持内存表 -高性能 -B-TREE索引 2] JAVA中是否有任何技术可以在程序运行
我通常会找到一些以char*作为参数的函数,但是我听说在C++中更推荐std::string。如何将std::string对象与以char* s为参数的函数一起使用?到目前为止,我已经知道了c_str
我正在移植我的一个旧 javascript 文件以与 requireJS 兼容。这是以前代码的样子。 // effect.js (function(exports){ // shorthand
在今天更新我的 SDK 之前,我有工作代码(为了将来引用,请查看问题询问日期)。 .getMap 曾经发出警告,表明它已被弃用,但现在它甚至不被识别为有效输入。我假设这是因为 API 24(Andro
根据 this reference sheet on hyperpolyglot.org , 下面的语法可以用来设置一个数组。 i=(1 2 3) 但是我在 dash 上遇到错误,它是 Ubuntu
我的 MacBook 上安装了 MYSQL 8.0.12(下载版本)。当我尝试转储 mysql40 的兼容版本时,收到错误 Invalid mode to --known: mysql40。我 100
您好,我正在更改我的版本控制系统,我调查了 perforce 是否与 bcm 补救措施兼容。有谁知道其他版本的控制系统也与 bcm 补救措施兼容?? 最佳答案 BMC Remedy 会更接近 Clea
我需要在 python 中的图像上绘制一般坐标网格。我可以计算网格线的像素坐标,因此我只需要一个能够将它们绘制为图像顶部的虚线 的模块。图像以 numpy 数组的形式出现,因此我需要能够在这些格式和绘
库接受文件输入的“传统”方式是做这样的事情: def foo(file_obj): data = file_obj.read() # Do other things here 客户端代
代码 Untitled Document #topDropDownMenu { position: relative;
我是一名优秀的程序员,十分优秀!