Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Exec: Lib, Dll and Exe

  1. #1
    Ngày gia nhập
    08 2017
    Bài viết
    3,710

    Mặc định Exec: Lib, Dll and Exe

    B0: tham khảo
    http://diendan.congdongcviet.com/threads/t447706::van-de-su-dung-de-quy-de-them-dau-sao-vao-giua-cac-ky-tu-trong-chuoi.cpp

    Không phải lúc nào cũng cần chi li, mẫn cán viết hết cốt kiếc để tạo exe.
    Theo OPP, ta có thể tạo thư viện, dùng lại cho nhiều ứng dụng, và che giấu (hide) việc cài đặt.

    B1: thực hiện cho topic trên
    + A tạo thư viện lib và dll
    C Code:
    1. #include <windows.h>
    2. #include <stdio.h>
    3.  
    4. char* Loop(char* src, int n){  
    5.     const char whs = ' ';
    6.     char* dst = new char[2 * n - 1];
    7.     dst[0] = src[0];
    8.    
    9.     int k = 1;
    10.     for( int i = 1; i < n; i++){
    11.         if( src[i] != whs && src[i - 1] != whs)
    12.             dst[k++] = '*';
    13.         dst[k++] = src[i];
    14.     }
    15.    
    16.     dst[k] = 0;
    17.     return dst;
    18. }
    19.  
    20. extern "C" __declspec(dllexport) char* allStar(char* src){//last char is '\n'
    21.     int n = strlen(src);
    22.     if(n < 2) return src;  
    23.     return Loop(src, n - 1);
    24. }
    25.  
    26. BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){
    27.     switch(fdwReason){
    28.         case DLL_PROCESS_ATTACH:
    29.            puts("===In DLL_PROCESS_ATTACH===\n");
    30.            /*
    31.            CheckIn - Init
    32.            */
    33.            break;
    34.         case DLL_PROCESS_DETACH:
    35.            puts("\n===In DLL_PROCESS_DETACH===");
    36.            /*
    37.            CheckOut - Release
    38.            */
    39.            break;
    40.     }
    41.     return TRUE;
    42. }

    + B tạo ứng dụng exe
    C Code:
    1. //header - interface
    2. extern "C" __declspec(dllimport) char* allStar(char* src);
    3.  
    4. #include <iostream>
    5. using namespace std;
    6.  
    7. int main(){
    8.     char a[100];
    9.     cout << "input string: ";
    10.     fgets(a, 100, stdin);
    11.  
    12.     cout << allStar(a) << endl;
    13.     //cout << "\nDone, bye.";
    14.    
    15.     return 0;
    16. }

    biên dịch chạy, như sau:
    Dos Code:
    1. F:\Yr2019\cpp\dLibs\Test\Binn>Exec
    2. ===In DLL_PROCESS_ATTACH===
    3.  
    4. input string: abc hello
    5. a*b*c h*e*l*l*o
    6.  
    7. ===In DLL_PROCESS_DETACH===

    Lúc thuận tiện nói tiếp.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    08 2017
    Bài viết
    3,710

    Không dùng tới khái niệm cao xiêu như địa chính trị - namespace, lớp - class, tầm vực - scope (private, protected , internal , public) ...

    Nó tạm đủ để che (hide) việc cài đặt


    Nó được đề cập nhiều trong sgk, giáo trình; ai ai cũng biết khi học i tờ.

    PS: OPP, ở trên bị lỗi đánh máy, vui lòng sửa lại OOP, Object-oriented programming.

  3. #3
    Ngày gia nhập
    08 2017
    Bài viết
    3,710

    B2: biên dịch có thể dùng một trong nhiều cách khác nhau, trong IDE - VS, bằng MsBuild.exe hay command line tools.

    lib file như trên dùng cho việc liên kết biên dịch; dll thì cần cho quá trình chạy của exe, nó có thể đặt đâu đó miễn sao exe có thể liên hệ được, không nhất thiết cùng thư mục.

  4. #4
    Ngày gia nhập
    08 2017
    Bài viết
    3,710

    Những ngôn ngữ khác thường xây dựng sẵn nhiều hàm nhập/xuất, thay đổi thời gian, ví dụ
    https://docs.microsoft.com/en-us/dotnet/api/system.datetime.op_addition?view=netcore-3.1

    Thử xây dựng hàm cộng addDays, chạy thử:
    C Code:
    1. extern "C" __declspec(dllimport) int addDays(int* d, int* m, int* y, int nDay);
    2.  
    3. #include <stdio.h>
    4.  
    5. int main() {
    6.     int after;
    7.     int dd, mm, yy;
    8.     //prompt user for date
    9.     printf("Enter date (dd/MM/yyyy): ");
    10.     scanf("%d/%d/%d", &dd, &mm, &yy);
    11.     //
    12.     printf("After day: ");
    13.     scanf("%d", &after);
    14.     //call lib
    15.     addDays(&dd, &mm, &yy, after);
    16.     //output result
    17.     printf("That day is %02d/%02d/%d", dd, mm, yy);
    18. }
    Hình chụp:

    code đính kèm
    ...
    ..
    .
    Attached Files Attached Files
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn