【发布时间】:2009-07-09 14:28:21
【问题描述】:
跟随my previous (answered) question的尾巴...
SharpSvn 使调用 Subversion 客户端 API 变得简单:
SvnClient client = new SvnClient();
client.Authentication.DefaultCredentials = new NetworkCredential(username, password);
client.CheckOut(new Uri("http://xxx.yyy.zzz.aaa/svn/repository"), workingCopyDir);
另一方面,从 C/C++ 调用客户端 API,如 minimal_client.c 所示,需要在 Subversion 上进行“更接近金属”的编码。
Visual Studio 2003 中是否有用于 C++ 的 Windows 库,其界面比 minimum_client 使用的界面更简单?
如果没有,是否有一个 VS2003 C++ 项目(一个 .vcproj 文件)演示了让 minimum_client 运行?我能够编译 minimum_client.c并使用以下库链接它:
libsvn_client-1.lib libsvn_delta-1.lib libsvn_diff-1.lib libsvn_fs-1.lib libsvn_fs_base-1.lib libsvn_fs_fs-1.lib libsvn_ra-1.lib libsvn_ra_local-1.lib libsvn_ra_svn-1.lib libsvn_repos-1.lib libsvn_subr-1.lib libsvn_wc-1.lib libapr-1.lib libaprutil-1.lib xml.lib libneon.lib
但是当我运行我的应用程序(在调试器中或在没有调试的情况下启动发布版本)时,它运行了大约 20 秒而没有碰到 main() 的第一行,然后抛出这个异常:
未处理的类型异常 'System.TypeLoadException' 发生在 未知模块。
附加信息:无法加载 从程序集中输入
apr_pool_t最小客户端, 版本=1.0.3477.16033, Culture=neutral,PublicKeyToken=null。
我尝试了 libsvn_.lib 和 svn_.lib 的各种组合,但无济于事。
对我做错了什么有什么想法吗?
编辑:我从一个“Win32 控制台项目”(仍在 VS2003 中)重新开始,现在我可以调试我的应用程序的前几行。但现在,在这一行:
if (svn_cmdline_init ("minimal_client", stderr) != EXIT_SUCCESS)
我得到一个不同的异常(在调试器中或在没有调试的情况下启动发布版本):
在 0x7c91b21a 中未处理的异常
Win32ConsoleProject_minimal_client.exe: 0xC0000005:访问冲突写入 位置 0x00000010。
编辑:This thread 解释说这个错误是我的应用程序中 svn 和 stderr 之间的 CRT 不匹配。如果我不想构建 Svn 以便它们匹配(我不想),我可以传递 NULL 而不是 stderr(前提是我愿意不使用会发送到 stderr 的消息)当我这样做时,我的应用程序一直正确运行。
【问题讨论】:
-
这是一个托管 C++ 项目吗?您是否尝试过“常规”C++ 项目?
-
@RaphaelSP - 这可能是我的问题之一 - 请参阅我的编辑。
-
这真的是 3 个问题:“有没有更简单的 API?”、“有 .vcproj 示例吗?”和“为什么 svn_cmdline_init() 会抛出异常?”
-
我已经解决了“为什么 svn_cmdline_init() 会抛出异常?”。结果,“是否有 .vcproj 示例?”变得不那么重要了。
-
我仍然希望得到以下答案:“是否有更简单的 Windows C++ 2003 API?”
标签: c++ windows visual-studio svn