首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows Native C 語言開發入門(一):跨語言調用與 Hello World

     編輯:關於C語言

「不可或缺 Windows Native」系列啟動:C/C++ 在 UWP/WinRT 中的互操作

本系列探討如何在 Windows Store Apps (C#) 中調用原生 C/C++ 代碼,並夯實 C 語言基礎。第一篇涵蓋 Windows Runtime Component 橋接機制、C 語言編譯設置、調試配置、UTF-8 保存模板,以及最經典的 Hello World。

1. C# 調用 C++:Windows Runtime Component 模式

UWP/WinRT 沙箱禁止直接加載普通 DLL,需封裝為 **Windows Runtime Component (wincpp)**,生成 `.winmd` 元數據文件,供 C#/JS/投影語言調用。

關鍵代碼結構

// NativeDll/Simple.h
#pragma once
namespace NativeDll {
    public ref class Simple sealed {
    public:
        int Add(int x, int y);
    };
}

// NativeDll/Simple.cpp
#include "pch.h"
#include "Simple.h"
using namespace NativeDll;
int Simple::Add(int x, int y) { return x + y; }

// NativeDemo/Simple.xaml.cs (C#)
using NativeDll;
var simple = new Simple();
int result = simple.Add(1, 1); // 2

C++/CX 關鍵字: `ref class`、`sealed`、`^` (handle)、`Platform::String^` 字符串類型。

2. Visual Studio C 語言項目必備設置

  • 編譯為 C++ 代碼: `.c` 文件屬性 → C/C++ → Advanced → Compile As → **Compile as C++ Code (/TP)**。否則 C99 特性(如 `//` 註釋、變量聲明混雜)可能報錯。
  • 禁用安全函數警告: 項目屬性 → C/C++ → Preprocessor → Preprocessor Definitions 添加 `_CRT_SECURE_NO_WARNINGS`,或文件頂部 `#define _CRT_SECURE_NO_WARNINGS`。解決 `strcpy` vs `strcpy_s` 等 MSVC 專有警告。
  • 混合模式調試: 方案屬性 → Debugger Type → **Mixed (Managed and Native)**。同時斷點調試 C# 和 C++ 代碼。
  • UTF-8 模板: 修改 `VC\vcprojectitems\hfile.h` 和 `newc++file.cpp` 文件編碼為 UTF-8,新建文件自動繼承。

3. C 語言 Hello World 規範寫法

頭文件 `cHello.h` —— 防重複包含、C++ 兼容

#ifndef _MYHEAD_HELLO_
#define _MYHEAD_HELLO_

#ifdef __cplusplus
extern "C" {
#endif

char *demo_cHello(char *name);

#ifdef __cplusplus
}
#endif
#endif

源文件 `cHello.c`

#include "pch.h"
#include "cHello.h"
#include "cHelper.h" // 字符串輔助

char *demo_cHello(char *name) {
    return str_concat2("hello: ", name);
}

/* main 函數說明:
int main(int argc, char *argv[]) {
    // argc 含程序名,argv[0] 為程序名
    return 0;
}
void main(void) 亦合法但非標準。*/

4. 字符串輔助 `cHelper.h`(示例)

char *str_concat2(const char *s1, const char *s2);
char *int_toString(int n);

實現細節見源碼下載,採用動態分配,調用者負責 `free`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved