【问题标题】:Is there a simpler Windows C++ Subversion API or an example .vcproj for minimal_client.c?是否有更简单的 Windows C++ Subversion API 或用于 minimum_client.c 的示例 .vcproj?
【发布时间】: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


【解决方案1】:

C++ 包装器似乎没有溢出网络。但是,您可能想尝试 SVNCPP,它可以从 RapidSVN 中提取出来。

详情见http://rapidsvn.tigris.org/(注意:我没试过)。

【讨论】:

  • 这也是我发现的全部。我应该担心它被称为“0.9.8”吗?
  • 我不这么认为,该应用程序似乎已经存在至少三年了,因此 C++ 包装器应该非常有用。尤其是版本号接近 1。
  • 我接受这一点是因为,连同您以“这是一个托管 C++ 项目吗?”开头的评论,我得到了我现在需要的东西。谢谢!
  • 顺便说一句,如果您决定创建自己的更简单的包装器,我会感兴趣的!
【解决方案2】:

你能升级到 Visual C++ 2005 吗?如果是这样,您可以将 SharpSvn 与 C++/CLI 一起使用。

或者甚至可能坚持使用 VC2003 并使用托管 C++ 去 SharpSvn ? (并不是说我对 if 的方式有任何了解)

编辑:哦,好吧,SharpSvn 的主页明确指出需要 VC++ 2005 SP1 ...

【讨论】:

  • 情况阻止迁移到 2005。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2012-01-18
  • 2023-03-19
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多